我有两种模式:
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
。
答案 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