2013-06-22 2 views
4

장고와 장고 REST 프레임 워크를 MongoEngine과 함께 사용하려고하는데 저에게 효과적이지 않습니다. 나는 어디서 일이 잘못 될지 모른다. 아마 누군가 나를 도와 줄 수있을 것이다.Django REST 프레임 워크와 MongoEngine의 AttributeError

models.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 mongoengine import * 

class Lady(Document): 
    firstname = StringField() 
    lastname = StringField() 

serializers.py : 여기에 코드입니다. 다음 명령을 실행합니다.

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' 

는 정말 레이디 클래스의 FIRSTNAME 속성이 있기 때문에 이런 일이 왜 몰라? 내가 여기서 무엇을 놓치고 있니?

감사 ...

+0

어떻게 당신이 당신의 코드에서 시리얼을 요구하고있다? – karthikr

+0

serial = LadySerializer (tiger) 그리고 나서 serial.data ... – evermean

답변

11

마지막으로 해결책을 얻었습니다. 나는 명시 적으로 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'} 

당신은이 문제 here에 대한 몇 가지 추가 정보를 찾을 수 있습니다. 이 경우에 대한 흥미로운 부분은 다음 게시물입니다.

버전 2.2에서는 암시 적 반복 동작의 사용이 중단됩니다. 현재 스타일 개체를 반복하지 않도록하려면 many=False을 명시 적으로 지정해야합니다. 2.4가되면 기본값은 None에서 False으로 전환됩니다. 이 도움이

희망 ....

관련 문제