【问题标题】: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
    

    【讨论】:

      猜你喜欢
      • 2013-07-11
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 2021-09-30
      • 1970-01-01
      • 2019-08-27
      • 1970-01-01
      • 2019-06-18
      相关资源
      最近更新 更多