OneToOneField的Django模型场

2024-09-29 05:16:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两种型号:

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

如何从FirstModel.foo生成一个变量baz?在

我希望它像:

^{pr2}$

最终目标:SecondModel的实例中获得{},就像{}。在


Tags: defaultmodelfooonmodelsbardeleteclass
1条回答
网友
1楼 · 发布于 2024-09-29 05:16:53

您可以在链接模型中使用^{}进行反向引用:

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是:

If you do not specify the related_name argument for the OneToOneField, Django will use the lower-case name of the current model as default value.

更新: 如果你想得到second_model_instace.foo,你甚至不需要related_name(反向引用)。它是前向引用,它已经是显式的。首先获取第一个模型(通过OneToOne字段),然后获取其属性foo,即:

^{pr2}$

相关问题 更多 >