2014-01-03 3 views
3

Я получаю ошибку «column template_id is not unique», теперь позвольте мне объяснить. У меня есть модель шаблона и версия игрока.Должен ли быть уникальный Django OneToOneField?

Шаблон:

class FarmTemplate(models.Model): 
    """Template of the "Farm" building""" 

    name = models.CharField(max_length=23) 
    flavor = models.TextField() 
    resource = models.CharField(max_length=23) 
    version = models.FloatField(unique=True) 

    def __unicode__(self): 
     return self.name 

Моя модель Пользователь:

class Farm(models.Model): 
    """Keeps track of Townhall""" 

    user = models.ForeignKey(User) 
    template = models.OneToOneField(FarmTemplate) 
    level = models.IntegerField() 

    def __unicode__(self): 
     return "User: %s, Farm level: %s" % (self.user, self.level) 

Когда я создаю мой первый объект все идет хорошо, однако, когда я создаю второй он говорит мне OneToOneField разве единственный (который является правильным, так как он использует тот же шаблон. Но я не знаю, почему это должно быть уникальным. Может кто-нибудь объяснить, где я поступил не так?

+0

Мда в Stackoverflow слово шаблон становится синим и может быть какой-то сборка в варианте? Я не знаю, так ли это в python? Если да, это может объяснить некоторые (не получает специальный цвет в geany) –

ответ

4

OnetoOne означает, что каждый кортеж уникален. Я думаю, вы должны использовать ForeignKey:

class Farm(models.Model): 
"""Keeps track of Townhall""" 

user = models.ForeignKey(User) 
template = models.ForeignKey(FarmTemplate) 
level = models.IntegerField() 

def __unicode__(self): 
    return "User: %s, Farm level: %s" % (self.user, self.level) 
+0

Хорошо, спасибо, я был уверен, что это связано с OneToOneField, просто не уверен, почему –

1

Просто добавить повод к ответу Альваро (так как вы говорите в своем комментарии вы не понимаете, почему):

Возьмите это в качестве примера: -> B (A = источник, B = цель)

Если у вас есть отношение «один к одному», это означает, что если у вас есть один источник A, вы имеете отношение к одной конкретной цели B (в противном случае ot будет один-ко-многим). Для целевого B единственным связанным исходным элементом может быть A, поскольку ему разрешено связываться только с одним (один к одному), иначе оно будет много-к-одному.

ForeignKey позволяет отнести многие OBJETS к одному связанному объекту

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