2
在我的應用程序中,我有一些產品,登錄用戶應該能夠將這些產品標記爲收藏夾。在Django Rest Framework中,用戶相關字段爲多對多關係
我模仿他們作爲一個多對多的關係在我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
是隻讀的,因此,它不會出現在update()
方法的validated_data中。
有沒有人有解決這個或類似的問題?
這工作就像一個魅力,非常感謝你對我的幫助了! –
@ R.Wenger YW。順便說一句,你可以調用'favorites.add'和'favorites.remove'而無需額外的檢查,因爲它們是由django在內部完成的。 – Raz
不知道,再次感謝! –