Python 使用Django REST框架和MongoEngine的AttributeError

Python 使用Django REST框架和MongoEngine的AttributeError,python,django,mongoengine,django-rest-framework,Python,Django,Mongoengine,Django Rest Framework,我试图将Django和Django REST框架与MongoEngine结合使用,但它似乎对我不起作用。我不知道哪里出了问题。。。也许有人能帮我。代码如下: models.py from mongoengine import * class Lady(Document): firstname = StringField() lastname = StringField() 序列化程序.py from rest_framework import serializers from

我试图将Django和Django REST框架与MongoEngine结合使用,但它似乎对我不起作用。我不知道哪里出了问题。。。也许有人能帮我。代码如下:

models.py

from mongoengine import *

class Lady(Document):
    firstname = StringField()
    lastname = StringField()
序列化程序.py

from rest_framework import serializers
from mongoengine import *

class LadySerializer(serializers.Serializer):

    firstname = serializers.CharField(max_length=50)
    lastname = serializers.CharField(max_length=50)

    def restore_object(self,attrs,instance=None):
        if instance:
            instance.firstname = attrs.get('firstname', instance.firstname)
            instance.lastname = attrs.get('lastname', instance.lastname)
            return instance
        return Lady(**attrs)
现在,我使用交互式控制台测试序列化是否有效。我执行以下命令

from core.models import * 
from core.serializers import *
tiger = Lady(firstname='Tiger', lastname="Lily")
serial = LadySerializer(tiger)
serial.data
我得到的是:

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/evermean/Code/django/env/pourl/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 499, in data
self._data = [self.to_native(item) for item in obj]
File "/home/evermean/Code/django/env/pourl/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 306, in to_native
value = field.field_to_native(obj, field_name)
File "/home/evermean/Code/django/env/pourl/local/lib/python2.7/site-packages/rest_framework/fields.py", line 164, in field_to_native
value = get_component(value, component)
File "/home/evermean/Code/django/env/pourl/local/lib/python2.7/site-packages/rest_framework/fields.py", line 56, in get_component
val = getattr(obj, attr_name)
AttributeError: 'str' object has no attribute 'firstname'
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/home/evermean/Code/django/env/pourl/local/lib/python2.7/site packages/rest_framework/serializers.py”,第499行,数据格式
self.\u data=[对于obj中的项目,self.to\u native(项目)]
文件“/home/evermean/Code/django/env/pourl/local/lib/python2.7/site-packages/rest\u-framework/serializers.py”,第306行,在to\u-native中
value=field.field_to_native(obj,field_name)
文件“/home/evermean/Code/django/env/pourl/local/lib/python2.7/site packages/rest\u framework/fields.py”,第164行,在field\u to\u native中
值=获取组件(值,组件)
文件“/home/evermean/Code/django/env/pourl/local/lib/python2.7/site packages/rest\u framework/fields.py”,第56行,在get\u组件中
val=getattr(对象,属性名称)
AttributeError:“str”对象没有属性“firstname”
现在我真的不知道为什么会发生这种情况,因为Lady类中有firstname属性?我错过了什么


谢谢

终于找到了解决办法。我需要显式地设置many=False以使其工作。所以这很好:

from core.models import * 
from core.serializers import *
tiger = Lady(firstname='Tiger', lastname="Lily")
serial = LadySerializer(tiger, many=False)
serial.data
和产量:

{'firstname': u'Tiger', 'lastname': u'Lily'}
您可以找到有关此问题的其他信息。本案例中有趣的部分是以下帖子:

版本2.2开始不推荐隐式迭代行为。此时,您需要显式指定
many=False
,以强制该行为不在
\uuuuuu iter\uuuu
样式对象上迭代。根据2.4,默认值将从
None
切换到
False


希望这有帮助……

您如何在代码中调用序列化程序?serial=LadySerializer(tiger),然后serial.data。。。