【问题标题】:Django Rest Framework Serialization fails: 'MetaDict' object has no attribute 'pk'Django Rest Framework 序列化失败:“MetaDict”对象没有属性“pk”
【发布时间】:2013-02-02 18:31:24
【问题描述】:

我正在将 Django Rest 框架与 MongoDB 一起使用,我正在尝试从 MongoDB 检索文档,然后将其序列化为 json,以便将其发送回以响应请求。

我有一个如下所示的数据库模型:

class TTest(Document):
    user_id = StringField()
    submission_status = StringField() 

以及对应的序列化器:

class TTestSerializer(serializers.ModelSerializer):

    class Meta:
        model = models.TTest
        pk = "_id"

现在有了这些,我希望从数据库中检索一个文档,并尝试完全按照关于使用 Django Rest Framework 进行序列化的教程进行操作:

queryset = models.TTest.objects.filter(user_id='bbb')   # retrieving documents using mongoengine
serializer = TTestSerializer(queryset)
dt = serializer.data
print "DATA SERIALIZED: ", dt

当我运行这些行,尝试序列化时,我得到了这个错误:

AttributeError: 'MetaDict' object has no attribute 'pk'

理论上我认为它应该可以工作,因为我在序列化程序的元数据中声明主键是“_id”...谁能帮我提个建议?

谢谢

【问题讨论】:

    标签: mongodb mongoengine django-rest-framework


    【解决方案1】:

    序列化器类中没有“pk”这样的选项,所以不会有任何影响。

    我对 mongoengine 了解不多,但如果对象不是标准 Django 模型实例,我希望您需要使用普通的“Serializer”类而不是“ModelSerializer”。

    值得在 REST framework 邮件列表中询问有关 REST framework 和 mongoengine 的问题,因为我知道还有其他一些人一直在做同样的事情。

    https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework

    【讨论】:

      【解决方案2】:

      Mongoengine 不是 Django 的 ORM 的直接替代品,因此可能无法与期望正常 ORM 的库本地集成。

      您可能想尝试使用 mongoengine 的 http://django-tastypie-mongoengine.readthedocs.org/en/latest/

      【讨论】:

      • 请注意 django-tastypie-mongoengine 在 AGPLv3 下获得许可
      猜你喜欢
      • 2013-01-07
      • 1970-01-01
      • 2018-03-30
      • 2015-10-15
      • 2019-04-30
      • 2017-03-04
      • 2015-07-14
      • 2019-07-05
      • 2021-05-02
      相关资源
      最近更新 更多