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”
如何将 Django queryset.values() 序列化为 json?