簡體   English   中英

Django ORM關系一對多

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM