我得到“列template_id不唯一”错误,现在让我解释一下。 我有一个模板模型和它的播放器版本。
模板:
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 :(得分: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)
答案 1 :(得分:1)
只是为阿尔瓦罗的答案添加一个理由(因为你在评论中说你不明白为什么):
以此为例:A - > B(A =来源,B =目标)
如果你有一对一的关系,这意味着如果你有一个来源A,你就有一个特定目标B的关系(否则就是一对多)。对于目标B,唯一相关的源元素可以是A,因为它允许仅与一个(一对一)相关,否则它将是多对一的。
ForeignKey允许将多个objets引用到一个相关对象