我正致力于通过Django Rest框架在移动应用程序API中实现Like/Unlike特性。在
所以我有以下模型: 在
class PlaylistLikes(models.Model):
user = models.ForeignKey(User)
playlist = models.ForeignKey(Playlist)
like = models.BooleanField(default=0, blank=True)
class Meta:
unique_together = ('user', 'playlist',)
verbose_name = "Playlist like"
verbose_name_plural = "Playlist likes"
我添加了unique_together
来限制用户喜欢他已经喜欢的播放列表。在
我的观点:
^{pr2}$和序列化程序:
class LikesSerializer(serializers.ModelSerializer):
def create(self, validated_data):
like = PlaylistLikes.objects.create(**validated_data)
playlist = Playlist.objects.get(pk=like.playlist.id)
playlist.likes_count += 1
playlist.save()
return validated_data
def update(self, instance, validated_data):
like = PlaylistLikes.objects.get(**validated_data)
like.like = False
like.save()
playlist = Playlist.objects.get(pk=like.playlist.id)
playlist.likes_count -= 1
playlist.save()
return validated_data
class Meta:
model = PlaylistLikes
fields = ('user', 'playlist', 'like')
网址:
router.register(r'likes', views.LikesView, 'likes')
为了喜欢播放列表,我发送了POST
方法,主体是playlist = 19
,user = 3
,like = 1
。喜欢是成功创造的。
与同一个播放列表不同,我发送了PUT
方法,其正文为:playlist = 19
,user = 3
,但我得到了以下错误:
"non_field_errors": [ "The fields user, playlist must make a unique set." ]
我知道这是因为模型中的unique_together
。但我不会用相同的user
和{
发生这种情况是因为在PUT方法处理程序中,您在不指定实例的情况下创建了序列化程序:
请看
^{pr2}$Serializer.__init__()
:您没有提供实例参数,它默认为无。在
对于更新,仅当实例属性不是“无”时,才应跳过“唯一的”一起验证:
要解决此问题,可以在初始化序列化程序之前移动Userlikes对象的查询:
相关问题 更多 >
编程相关推荐