2016-03-12 3 views
-1

Учтите, что у нас есть две модели Django: вопрос и ответ. Вопрос может иметь много ответов на него, но ответ может иметь только один вопрос, связанный с ним. Мы можем моделировать отношения как:Когда использовать поле ManyToMany над ForeignKey?

class Question(models.Model): 
    text  = models.CharField(...) 
    answers = models.ManyToManyField('Answer') 

class Answer(models.Model): 
    text  = models.CharField(...) 

Мы также можем смоделировать его как:

class Question(models.Model): 
    text  = models.CharField(...) 

class Answer(models.Model): 
    text  = models.CharField(...) 
    question = models.ForeignKey('Question') 

менеджеры Джанго позволяют отслеживать как ForeignKey и ManyToManyField назад. Какую модельную структуру мы должны использовать?

+1

Поскольку вы прямо заявляете, что ответ может принадлежать только одному вопросу, почему бы вам даже рассмотреть многие из многих? –

ответ

1

one-to-many конечно. Вы можете достичь того же, используя отношения «многие-ко-многим», но вы сильно усложняете ситуацию, и вы заплатите за хит производительности.

Подумайте об этом с точки зрения моделирования базы данных (забудьте о ORM). Зачем вам делать: question -> many-to-many-manager -> answers вместо того, чтобы иметь: question -> answers.

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