[英]Django ORM relations one-to-many
我有一個模型:
class Product(models.Model):
title = models.CharField(max_length=200)
url = models.URLField()
pub_date = models.DateTimeField()
votes_total = models.IntegerField(default=1)
image = models.ImageField(upload_to='images/')
icon = models.ImageField(upload_to='images/')
body = models.TextField()
hunter = models.ForeignKey(User, on_delete=models.CASCADE)
現在,我想添加支持者的功能,以了解用戶已經投票選擇的產品。 我需要這樣做,以使用戶只能對一種產品進行一次投票。
再次說明一下-用戶可以對多個產品進行投票,但每個產品只能投票一次。
因此,關系是一種產品-許多用戶(支持者) 。
我嘗試添加下一個字段,但是即使提供了默認字段,也無法進行遷移。 我也嘗試清除數據庫,但再次無法使其正常工作。
upvoters = models.ForeignKey(User, on_delete=models.CASCADE, related_name='upvoted')
我想它可以按以下方式工作:
確定已批准產品的字段。 要檢查用戶是否已在產品上進行過投票,請致電:
User.upvoted.filter(id=product.id).count() == 1
這意味着用戶已在該產品上進行過投票。
怎么了? 我應該更改使其工作嗎?
您將必須使用ManyToMany,但是您可以使用自定義直通模型來限制產品/投票組合。
在產品類別中,添加:
voters = models.ManyToManyField(User, through='ProductVote', related_name='product_voters')
然后通過模型添加自定義:
class ProductVote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
product = models.ForeignKey(Vote, on_delete=models.CASCADE)
class Meta:
unique_together = ['user', 'product']
如果您嘗試為相同的用戶/產品組合添加投票,則會引發IntegrityError。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.