我希望有人能帮助解决这个问题。我相信答案可能很简单,但我就是摸不着头脑。我正在创建一个消息传递API,用户喜欢评论,但是我想防止用户喜欢自己的评论
我有以下链接到消息模型的Like模型:
# models.py
class Like(models.Model):
message_id = models.ForeignKey(Message, related_name='message_id_like', on_delete=models.CASCADE)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
like = models.BooleanField()
like_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return str(self.owner) + ', ' + self.message_id.message_title[:40]
使用API的序列化程序
# serializers.py
class LikeSerializer(serializers.ModelSerializer):
owner = serializers.ReadOnlyField(source='owner.username')
class Meta:
model = Like
fields = [
'message_id',
'owner',
'like',
'like_date',
]
和一个视图:
# views.py
class LikeViewSet(viewsets.ModelViewSet):
queryset = Like.objects.all()
serializer_class = LikeSerializer
def perform_create(self, serializer): # Saving the user
serializer.save(owner=self.request.user)
我认为我需要在LikeViewSet类中添加一个函数,以防止在like user匹配消息user时创建Like,然而,我不知道如何指定它。
感谢您的帮助。
发布于 2021-02-25 15:56:43
最终使用提交的答案的变体解决了这个问题。避免序列化程序访问错误的秘诀是初始_数据方法(而不是已验证的_拉回错误数据的数据方法)。
def perform_create(self, serializer):
message = get_object_or_404(Message, pk=serializer.initial_data['message_id'])
if message.owner == self.request.user:
raise PermissionDenied
else:
serializer.save(owner=self.request.user)
https://stackoverflow.com/questions/66330893
复制相似问题