【问题标题】:How do I use a models current id to query another model如何使用模型当前 id 查询另一个模型
【发布时间】:2026-01-20 20:30:01
【问题描述】:

我有两个类,JobFinancialInfo(models.Model) 和另一个模型类,其字段名为 financial_info = models.OneToOneField(JobFinancialInfo, on_delete=models.PROTECT)。我正在尝试在 JobFinancialInfo 上创建一个 @property,它将返回第二个模型中的所有对象,该模型的 ID 为 JobFinancialInfo 的 self.id(?)。我想专门这样做,以便我可以在第二个模型中的另一个字段上运行聚合作为第一个模型的属性。有没有办法做到这一点,或者有更好、更有效的方法吗?

【问题讨论】:

  • 这样的对象最多有一个,这就是为什么它是OneToOneField

标签: python-3.x django django-models


【解决方案1】:

JobFinancialInfo 上的 @property 将返回第二个模型中的所有对象,该模型的 ID 为 self.idJobFinancialInfo

因为它是一个OneToOneField,所以最多个这样的对象。事实上,OneToOneField 本质上是ForeignKey,即unique=True,因此这意味着不能有两个模型引用同一个对象。

如果你创建一个OneToOneField,Django 将自动反向构造一个关系,这意味着如果另一个模型名为OtherModel,你可以访问OtherModel指的是 JobFinancialInfo 对象:

<i>myjobfinancialinfo</i>.<b>othermodel</b>

如果没有这样的元素,这将引发OtherModel.DoesNotExist 异常。

所以你可以尝试通过以下方式找到它:

try:
    myjobfinancialinfo.othermodel
except OtherModel.DoesNotExist:
    # … do something …
    pass

您可以使用与ForeignKey [Django-doc]多对一 关系,在这种情况下,多个OtherModels 可以链接到相同 JobFinancialInfo。在这种情况下,您可以通过以下方式检索项目:

<i>myjobfinancialinfo</i>.<b>othermodel_set</b>.all()

这可以是包含零个、一个或多个元素的QuerySet

如果您不想使用<i>othermodel</i><i>othermodel</i>_set,可以更改related_name=… parameter [Django-doc] 以指定另一个名称。

例如,如果OtherModel 看起来像:

class OtherModel(models.Model):
    financial_info = models.ForeignKey(
        JobFinancialInfo,
        related_name='othermodels'
    )

然后你访问相关的对象:

<i>myjobfinancialinfo</i>.<b>othermodels</b>.all()

【讨论】:

  • 听起来我可能需要建立多对一关系——这会改变自动反向关系构造吗? p.s.谢谢!!
  • @NovicePython127:是的,如果你使用ForeignKey,那么这意味着有很多项目与JobFinancialInfo相关,那么你使用myjobfiancialinfo.othermodel_set.all()访问它。
最近更新 更多