2015-06-02 4 views
1

Мои models.py:Django 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), потому что в таком случае a User сможет прокомментировать только один раз через все Post s.

Кроме того, я не могу сделать 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

Смежные вопросы