Django 序列化到 JSON 错误:“MetaDict”对象没有属性“concrete_model”

Posted

技术标签:

【中文标题】Django 序列化到 JSON 错误:“MetaDict”对象没有属性“concrete_model”【英文标题】:Django serialization to JSON error: 'MetaDict' object has no attribute 'concrete_model' 【发布时间】:2013-01-07 04:05:33 【问题描述】:

我正在开发一个使用 Django 和 MongoDB(作为模型)的应用程序。我正在尝试使用从表单中获取的数据(手动)初始化模型对象(以便将其进一步发送到另一台服务器)。模型如下所示:

class MyModel(DynamicDocument):
    study_name = StringField(default="first study")
    individual_name = StringField(default="individual")
    file_list = ListField(StringField)   # this is a list of paths to some files

在表单中我正在执行以下操作:

pilot_object = MyModel()
pilot_object.individual_name = self.data['individual_name']
pilot_object.study_name = self.data['study_name']
pilot_object.file_list = files_list #file paths (strings)

其中 self.data 是从表单接收到的数据。 现在我想按照文档中的描述将此对象(pilot_object)序列化为 JSON:

data_serialized = serializers.serialize('json', [pilot_object, ])

但我收到此错误:

“MetaDict”对象没有“concrete_model”属性

序列化失败。

谁能帮忙?

【问题讨论】:

我有同样的问题,发现这是因为我使用的是具有不同 QuerySet 对象的 MongoEngine。文档在这里:docs.mongoengine.org/en/latest/… 你找到解决办法了吗? 不,我最近停止寻找解决方案。 :( 我认为 DRF 的序列化不能在 mongoengine 上工作。也许你可以试试django-rest-framework-mongoengine 或者不要使用 DRF 的序列化。 我遇到了类似的问题,使用来自rest_framewrok_mongoengine seralizers 的DocumentSerializer 解决了这个问题。 【参考方案1】:

这是由于您使用的是旧版本的 django。检查1.3 和1.4 之间的区别,concrete_model 仅适用于 1.4 及更高版本。

【讨论】:

我正在使用 Django 1.6b4(当前可用的最新 Beta)并且遇到了同样的问题。有什么建议吗? 我在使用 Django 1.7.8 时遇到了同样的问题 :(【参考方案2】:

如果您有元 Inheritance:True,则将其删除。它正在寻找我认为您没有设计的具体类,因此无论如何都不需要继承为 True。它对我有用。

【讨论】:

【参考方案3】:

是的,对于 mongoengine 文档使用 -- 'from rest_framework_mongoengine import serializers' 而不是 from rest_framework import serializers。并且序列化器类应该继承 DocumentSerializer。

【讨论】:

以上是关于Django 序列化到 JSON 错误:“MetaDict”对象没有属性“concrete_model”的主要内容,如果未能解决你的问题,请参考以下文章

Django 序列化到 JSON 错误:“MetaDict”对象没有属性“concrete_model”

将列表序列化为 JSON

如何将 Django queryset.values() 序列化为 json?

Django:“TypeError:[] 不是 JSON 可序列化的”为啥?

Django 表单 (下) - 序列化操作

在 Django 中,尝试转储数据时出现“错误:无法序列化数据库”?