Django DRF IntegrityError:非空约束失败:用户id

Django DRF IntegrityError:非空约束失败:用户id,django,rest,django-models,django-rest-framework,django-database,Django,Rest,Django Models,Django Rest Framework,Django Database,我不知道如何将用户对象传递给以下序列化程序: class ReviewSerializer(serializers.ModelSerializer): user = UserSerializer(read_only=True) class Meta: model = Review fields = ('pk', 'title', 'user', 'movie', 'timestamp', 'review_text',) 我有这个视图集: cla

我不知道如何将用户对象传递给以下序列化程序:

class ReviewSerializer(serializers.ModelSerializer):
    user = UserSerializer(read_only=True)

    class Meta:
        model = Review
        fields = ('pk', 'title', 'user', 'movie', 'timestamp', 'review_text',)
我有这个视图集:

class ReviewsViewSet(viewsets.ModelViewSet):
    queryset = Review.objects.all()
    serializer_class = ReviewSerializer
这个模型:

class Review(models.Model):
    title = models.CharField(max_length=255)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='reviews')
    movie = models.ForeignKey(Movie, on_delete=models.CASCADE, related_name='reviews')
    review_text = models.TextField()
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return '{movie} review by {user}'.format(user=self.user, movie=self.movie)
我的javascript请求如下所示:

return axios({
  method: 'post',
  url: 'http://localhost:8000/api/reviews/',
  data: { // Using data from Vue
    title: this.review_title,
    movie: this.id,
    review_text: this.review_text,
    user: JSON.stringify(this.user)
  },
  headers: {
    'Content-Type': 'application/json',
    Authorization: `JWT ${token}`
  }
})
它给了我很多

如何将用户对象传递给请求


提前感谢。

从序列化程序中删除
只读=True

class ReviewSerializer(serializers.ModelSerializer):
    user = UserSerializer()

    class Meta:
        model = Review
        fields = ('pk', 'title', 'user', 'movie', 'timestamp', 'review_text',)



仅用于调试目的

class ReviewsViewSet(viewsets.ModelViewSet):
    queryset = Review.objects.all()
    serializer_class = ReviewSerializer

    def create(self, request, *args, **kwargs):
        print(request.data)  # print here <<<<
        return super(ReviewsViewSet, self).create(request, *args, **kwargs)
class ReviewViewSet(ViewSet.ModelViewSet):
queryset=Review.objects.all()
序列化程序\u class=ReviewSerializer
def创建(self、request、*args、**kwargs):

打印(request.data)#在这里打印是的,但是如果我取出
read\u only=True
,它会告诉我:
“具有该用户名的用户已经存在。”
。因此,我不想发布新用户,只是为了获取创建特定评论所需的用户数据。您可以添加前端传递的
user
值吗?@yierstem反正我已经更新了答案。希望它能帮助我传递存储在Vuex中的整个用户对象,以便显示用户详细信息和内容。所以它看起来像是这样的:{code>“{”pk:1,“用户名”:“test”,“名字”:“test”,“姓氏”:“test”,“email”:test@gmail.com“}”
。我发送了一个包含所有必需字段的请求,特别是用户字段,并返回另一个错误:
“user”:[“此字段是必需的。”]
。哦,好的,现在它工作了。谢谢你们详细的回答,我现在学会了如何调试DRF。
class ReviewsViewSet(viewsets.ModelViewSet):
    queryset = Review.objects.all()
    serializer_class = ReviewSerializer

    def create(self, request, *args, **kwargs):
        print(request.data)  # print here <<<<
        return super(ReviewsViewSet, self).create(request, *args, **kwargs)