[英]Django Rest Framework: AssertionError
我的Django Rest Framework有問題,我正在學習設置權限和與我的API的關聯 ,因此我無法運行服務器,因此它說AssertionError:Field(read_only = True)應該為ReadOnlyField
我的模型
class Task(models.Model):
owner=models.ForeignKey('auth.User',related_name='tasks')
completed=models.BooleanField(default=False)
title=models.CharField(max_length=100)
description=models.TextField()
serializer.py
class TaskSerializer(serializers.ModelSerializer):
owner=serializers.Field('owner.username')
class Meta:
model = Task
fields=('title','description','completed','owner ')
permission.py
class IsOwnerOrReadOnly(BasePermission):
def has_object_permission(self, request, view, obj):
if request.method is SAFE_METHODS:
return True
return obj.owner==request.user
views.py
class TasksMixins(object):
queryset = Task.objects.all()
serializer_class=TaskSerializer
permission_classes=(IsOwnerOrReadOnly,)
def pre_save(self,obj):
obj.owner=self.request.user
class TaskList(ListCreateAPIView):
pass
class TaskDetail(RetrieveUpdateDestroyAPIView):
pass
我不確定我搞砸了。 任何幫助深表感謝
owner.username
可能有問題,因為我看不到如何直接更新它。
嘗試
class TaskSerializer(serializers.ModelSerializer):
class Meta:
model = Task
read_only=('owner.username',)
fields=('title','description','completed','owner.username')
IsOwnerOrReadOnly類試圖將屬性所有者與登錄的用戶進行比較,但是在序列化程序中,您只有用戶名而不是用戶本身,序列化程序應如下所示:
class TaskSerializer(serializers.ModelSerializer):
owner_username=serializers.Field('owner.username', read_only=True)
class Meta:
model = Task
fields=('title','description','completed','owner', 'owner_username')
另外,您還需要驗證對象是否具有owner屬性:
class IsUserOwner(BasePermission):
def has_object_permission(self, request, view, obj):
if request.method is SAFE_METHODS:
if not hasattr(obj, 'owner'):
return True
return obj.owner == request.user
return True
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.