2015-06-02 120 views
1

models.pyDjango OneToOneField或ForeignKey?

class User: 
    // fields ... 

class Post: 
    // fields ... 

class Comment: 
    news = models.ForeignKey(Post) 
    user = models.???(User) 

每個Post可以有任意數量的Comment秒。 但是,對於每個Post,我希望用戶只有一個Comment我該如何建模?

我不能這樣做user = models.OneToOneField(User),因爲在這種情況下,User只能在所有Post之間發表評論一次。

此外,我不能這樣做,因爲user = models.ForeignKey(User)在這種情況下一個User將能夠張貼的許多意見,因爲他喜歡上一個Post這不是我想要的。

回答

3

您感興趣的unique_together模型元選項:

字段名的設置是,加在一起,必須是唯一的。然後

class Comment(models.Model): 
    news = models.ForeignKey(Post) 
    user = models.ForeignKey(User) 
    # ... 
    class Meta: 
     unique_together = ('news', 'user') 

user字段可以是一個簡單的ForeignKey

+0

太棒了!另請建議我如何學習Django。我是否只涉及所有的調整,選項和配置?有很多選項:(。 – kamalbanga

+1

很明顯,我不能在評論中掩蓋這個問題,甚至沒有答案。有很多書和教程,但一個好的開始總是[Django文檔](https://docs.djangoproject。 com/en/1.8 /),這對於這個級別的問題來說非常廣泛。選項越多,功能就越多。 – Wtower