【问题标题】:Does Django OneToOneField needs to be unique?Django OneToOneField 是否需要唯一?
【发布时间】:2014-01-21 10:35:07
【问题描述】:

我收到“列模板 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 不是唯一的(这是正确的,因为它使用相同的模板。 但我不知道为什么这需要是独一无二的.. 有人可以解释我哪里出错了吗?

【问题讨论】:

  • 嗯,在 Stackoverflow 中,单词模板变成蓝色并且可能是一些内置选项?我不知道python中是否也是这种情况?如果是这样,那可能会解释一些(在 geany 中没有特殊颜色)

标签: django model one-to-one


【解决方案1】:

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)

【讨论】:

  • 好的,谢谢,我有点确定它与 OneToOneField 有关,只是不知道为什么
【解决方案2】:

只是为阿尔瓦罗的回答添加一个理由(因为你在评论中说你不明白为什么):

以此为例:A --> B (A = source, B = target)

如果你有一个一对一的关系,这意味着如果你有一个源 A,你就和一个特定的目标 B 有一个关系(否则 ot 将是一对多的)。对于目标 B,唯一相关的源元素可以是 A,因为它只允许与一个(一对一)相关,否则它将是多对一的。

ForeignKey 允许将多个对象引用到一个相关对象

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-15
    • 1970-01-01
    • 2014-09-23
    • 2021-12-17
    • 2011-03-28
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多