Python Django Rest框架:断言错误

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)

我对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)
    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