【发布时间】:2017-07-08 08:12:44
【问题描述】:
在我的应用程序中,我有一些产品,登录用户应该能够将这些产品标记为收藏夹。
我在models.py 中将它们建模为多对多关系,如下所示:
class Product(models.Model):
product_name = models.CharField(max_length=200)
# ...
def __unicode__(self):
return self.product_name
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
favorites = models.ManyToManyField(Product)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.get_or_create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
我现在想要实现的是,在产品详细信息视图中,用户可以查看该产品是否已经是他的最爱,并且应该能够选中一个框以使其成为他的最爱。
在模型级别这是多对多关系,但在视图上它更多是布尔关系(当前用户最喜欢的是/否)。
我已经设法在详细视图中显示收藏状态,SerializerMethodField
class ProductSerializer(serializers.ModelSerializer):
# ...
favorite = serializers.SerializerMethodField()
def get_favorite(self, obj):
try:
self.context['request'].user.profile.favorites.get(pk=obj.pk)
return True
except Product.DoesNotExist:
return False
我目前正在努力使用此设置将收藏添加到当前用户的收藏列表中,因为此 SerializerMethodField 是只读的,因此不会出现在 @987654326 的验证数据中@方法。
有没有人能解决这个或类似的问题?
【问题讨论】:
标签: django rest django-rest-framework many-to-many serialization