2014-04-02 64 views
4

我無法理解Django Rest Framework在序列化數據時如何處理相關模型實例。從使用Django Rest Framework的方法序列化數據

例如,我有兩個型號,它們都涉及到Django的'用戶':

from django.contrib.auth.models import User 
from django.db import models 

class UserStatus(models.Model): 
    user = models.ForeignKey(User) 
    created = CreationDateTimeField() 

    def is_anonymous(self): 
     return self.user.userprofile.anonymous_user 


class UserProfile(models.Model): 
    user = models.OneToOneField(User) 
    anonymous_user = models.BooleanField(default=False) 

如果我使用下面的方法序列化模型實例,它工作正常:

from rest_framework import serializers 

class UserStatusSerializer(serializers.ModelSerializer): 
    get_anonymous = serializers.SerializerMethodField('get_anonymous_state') 

    def get_anonymous_state(self, obj): 
     return self.object.user.userprofile.anonymous_user 

    class Meta: 
     model = UserStatus 
     fields = ('id', 'get_anonymous',) 

我認爲調用序列化器的結構是這樣的:

def put(self, request, *args, **kwargs): 
     user = self.request.user 
     serializer = UserStatusSerializer(self.model.objects.filter(user=user, data=request.DATA) 

     if serializer.is_valid(): 
       new_serializer = UserStatusSerializer(user) 
       return Response(new_serializer.data, status=status.HTTP_200_OK) 

如果我嘗試使用am ethod,該型號UserStatus存在,我得到一個錯誤:

class UserStatusSerializer(serializers.ModelSerializer): 
    is_anonymous = serializers.Field(source='is_anonymous') 

    class Meta: 
     model = UserStatus 
     fields = ('id', 'is_anonymous',) 

在第二種方法中,我得到錯誤信息:

Exception Value: UserStatus has no user 

我真不明白是怎麼回事。如果我設置跟蹤並逐行通過PUT請求,它會正常工作並且存在正確的關係(例如,我在方法中,我可以訪問self.user.userprofile.anonymous_user);它通過兩次序列化並且第二次突破。當我讓我測試它作爲一個完整的代碼塊時,它也不起作用。任何建議,我做錯了什麼?

回答

3

你試過

is_anonymous = serializers.Field(source='user.userprofile.is_anonymous') 

沒有調用的方法?

+0

這也行不通..... – djq

+0

上面的答案是有效的,如果你添加@property的方法 – Jostcrow

相關問題