【问题标题】:Tastypie dehydrate for models that have specific types of fieldsTastypie dehydrate 用于具有特定类型字段的模型
【发布时间】:2013-12-10 19:21:28
【问题描述】:
我正在将 Django、Mezzanine 和 Tastypie 用于我正在构建的 CMS。 Tastypie 公开了一个 API,以便另一个应用程序可以使用来自 CMS 的数据。我有许多带有 ImageFields 的 Django 模型,我想在 Tastypie 的 ModelResource 脱水方法中为所有 ImageFields 执行一些特定操作,即生成一些缩略图。我希望能够自动检查资源的相应模型是否有任何 ImageField,如果有,则将缩略图添加到资源的包中,而不是在每个模型资源中覆盖 dehydrate 并按名称定位 ImageField。
综上所述,有没有办法遍历模型资源对应模型的字段,并在 dehydrate 方法中检查每个字段的类型?
【问题讨论】:
标签:
python
django
tastypie
mezzanine
【解决方案1】:
您可以使用Meta.object_class 访问与ModelResource 关联的模型。它要么是明确定义的,要么是从Meta.queryset 推断出来的。可以从ModelResource 实例的_meta 属性访问元类。
模型的字段可以通过对应模型元类的fields属性访问(在_meta属性下可用)。
也就是说,以下应该可以工作:
class MyModelResource(ModelResource):
class Meta:
# If `object_class` is omitted, it's value is taken from
# `queryset`, so defining both is optional.
object_class = MyModel
queryset = MyModel.objects.all()
def dehydrate(self, bundle):
# `model_class` == `MyModel`
model_class = self._meta.object_class
fields_list = model_class._meta.fields