OneToOneField的Django模型字段

时间:2016-07-30 00:34:08

标签: python django model

我有两种模式:

class FirstModel(models.Model):
     foo = models.IntegerField(default=0)
class SecondModel(models.Model):
     bar = models.OneToOneField(FirstModel, on_delete=models.CASCADE, primary_key=True)

如何制作来自baz的变量FirstModel.foo

我希望它如此简单:

class SecondModel(models.Model):
     bar = models.OneToOneField(FirstModel, on_delete=models.CASCADE, primary_key=True)
     baz = bar.foo

终极目标:从foo的{​​{1}}实例获取SecondModel

1 个答案:

答案 0 :(得分:3)

您可以在链接模型中使用related_name进行向后引用:

class FirstModel(models.Model):
     foo = models.IntegerField(default=0)


class SecondModel(models.Model):
    bar = models.OneToOneField(
        FirstModel, 
        related_name='baz', 
        on_delete=models.CASCADE, 
        primary_key=True
    )

现在,如果链接存在,您可以first_model_intance.baz进行访问,否则您将获得DoesNotExsist例外。 default是:

  

如果没有为OneToOneField指定related_name参数,   Django将默认使用当前模型的小写名称   值。

<强>更新 如果您想获得second_model_instace.foo,则甚至不需要related_name(向后引用)。它是前向参考,已经明确。首先获取first_model(通过OneToOne Field),然后获取其属性foo,即:

second_model_instance.bar.foo
相关问题