Tastypie脱水用于具有特定类型的领域的模型

时间:2013-11-25 21:28:12

标签: python django tastypie mezzanine

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

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

1 个答案:

答案 0 :(得分:0)

您可以使用ModelResource访问与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