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
);它通過兩次序列化並且第二次突破。當我讓我測試它作爲一個完整的代碼塊時,它也不起作用。任何建議,我做錯了什麼?
這也行不通..... – djq
上面的答案是有效的,如果你添加@property的方法 – Jostcrow