首页 > 解决方案 > 没有更改代码,但我的程序现在无法运行

问题描述

我有一个带有用户外键的 Django Post 模型。当我创建一个帖子时,它通常会工作并按照序列化程序中的说明用请求的用户填充用户,但在 Postman 上我得到:

{
    "user": [
        "This field is required."
    ]
}

这是 API 视图:

class PostViewset(viewsets.ModelViewSet):
    queryset = Post.objects.all()
    serializer_class = PostSerializer
    permission_classes = [IsOwnerOrReadOnly]

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

这是序列化程序:

class PostSerializer(serializers.ModelSerializer):
    user_name = serializers.SerializerMethodField()

    class Meta:
        model = Post
        fields = ['user', 'id', 'title', 'body', 'user_name']
    
    def get_user_name(self, obj):
        try:
            return obj.user.user_name
        except:
            pass

标签: djangodjango-modelsdjango-rest-frameworkdjango-views

解决方案


user从序列化程序类中删除,fields因为您正在使用该perform_create(...)方法分配登录用户

class PostSerializer(serializers.ModelSerializer):
    user_name = serializers.SerializerMethodField()

    class Meta:
        model = Post
        fields = ['id', 'title', 'body', 'user_name']
    
    def get_user_name(self, obj):
        try:
            return obj.user.user_name
        except:
            pass

推荐阅读