1

我正在为我正在构建的 CMS 使用 Django、Mezzanine 和 Tastypie。Tastypie 公开了一个 API,以便另一个应用程序可以使用来自 CMS 的数据。我有许多带有 ImageFields 的 Django 模型,我想在 Tastypie 的 ModelResource 脱水方法中为所有 ImageFields 执行一些特定操作,即生成一些缩略图。我希望能够自动检查资源的相应模型是否有任何 ImageField,如果有,则将缩略图添加到资源的包中,而不是在每个模型资源中覆盖 dehydrate 并按名称定位 ImageField。

总而言之,有没有办法遍历模型资源的相应模型字段并检查脱水方法中每个字段的类型?

4

1 回答 1

0

ModelResource您可以访问与using关联的模型Meta.object_class。它要么是明确定义的,要么是从Meta.queryset. 可以从实例的_meta属性访问元类。ModelResource

模型的字段可以通过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
于 2013-11-25T21:53:14.233 回答