Джанго имеет несколько отношений один ко многим, которые ссылаются на одну и ту же модель - PullRequest
2 голосов
/ 21 февраля 2010

У меня есть модель, которая имеет отношение «многие ко многим» к другой модели, она выглядит следующим образом:

class Match(models.Model):
"""Model docstring"""
   Match_Id = models.AutoField(primary_key=True)
   Team_one = models.ManyToManyField('Team',related_name='Team one',symmetrical=False,) 
   Team_two = models.ManyToManyField('Team',related_name='Team two',symmetrical=False,) 
   stadium = models.CharField(max_length=255, blank=True)
   Start_time = models.DateTimeField(auto_now_add=False, auto_now=False, blank=True, null=True)
   Rafree = models.CharField(max_length=255, blank=True)
   Judge = models.CharField(max_length=255, blank=True)
   winner = models.ForeignKey('Team', related_name='winner',to_field='Team_Name')    
   updated = models.DateTimeField('update date', auto_now=True )
   created = models.DateTimeField('creation date', auto_now_add=True )

Каков наилучший способ реализации такой модели? несмотря на то, что django не выдает никаких ошибок при прохождении модели sql, когда syncdb оправдан, он выдает ошибки, говорящие there is no unique constraint matching given keys

Ответы [ 2 ]

1 голос
/ 21 февраля 2010

Использование пробелов в атрибуте related_name делает меня неловким, но я думаю, что настоящая проблема связана с использованием атрибута to_field в поле winner.Насколько я знаю, вы можете установить отношения с базой данных только для unique полей.На самом деле не имеет смысла относиться к другому объекту, используя поле, которое может быть не уникальным.

Я не уверен, чего вы хотите достичь, подключившись через это поле.Вы обычно соединяете модели, используя поля первичного ключа.Это по-прежнему позволяет получить доступ к любому другому полю в связанном объекте.

1 голос
/ 21 февраля 2010

Вы уверены, что Team_one и Team_two должны быть полями ManyToMany? Конечно, в матче есть только одна команда с каждой стороны - в этом случае оба должны быть ForeignKeys.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...