Python Django Rest框架:断言错误
我对Django Rest框架有一个问题,我正在学习设置API的权限和关联,因此我无法运行服务器,所以它说,AssertionError:Field(read_only=True)应该是ReadOnlyField 我的模特Python Django Rest框架:断言错误,python,django,permissions,django-rest-framework,Python,Django,Permissions,Django Rest Framework,我对Django Rest框架有一个问题,我正在学习设置API的权限和关联,因此我无法运行服务器,所以它说,AssertionError:Field(read_only=True)应该是ReadOnlyField 我的模特 class Task(models.Model): owner=models.ForeignKey('auth.User',related_name='tasks') completed=models.BooleanField(default=False)
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()
序列化程序.py
class TaskSerializer(serializers.ModelSerializer):
owner=serializers.Field('owner.username')
class Meta:
model = Task
fields=('title','description','completed','owner ')
权限.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
上,因为我不知道如何直接更新
试一试
问题可能出在
owner.username
上,因为我不知道如何直接更新它
试一试
IsOwnerRorReadOnly类正在尝试将属性所有者与记录的用户进行比较,但在序列化程序中,您只有用户名,而没有用户本身,序列化程序应如下所示:
class TaskSerializer(serializers.ModelSerializer):
owner_username=serializers.Field('owner.username', read_only=True)
class Meta:
model = Task
fields=('title','description','completed','owner', 'owner_username')
您还需要验证对象是否具有所有者属性:
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
IsOwnerRorReadOnly类正在尝试将属性所有者与记录的用户进行比较,但在序列化程序中,您只有用户名,而没有用户本身,序列化程序应如下所示:
class TaskSerializer(serializers.ModelSerializer):
owner_username=serializers.Field('owner.username', read_only=True)
class Meta:
model = Task
fields=('title','description','completed','owner', 'owner_username')
您还需要验证对象是否具有所有者属性:
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
Im获取TypeError:uuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu