gpt4 book ai didi

python - 从 Django ORM 只获取一个相关对象

转载 作者:太空宇宙 更新时间:2023-11-03 18:11:53 25 4
gpt4 key购买 nike

以下是我正在处理的模型的精简版本:

class Contact(models.Model):
contact_no = models.IntegerField(primary_key=True)
email_address = models.CharField(max_length=60, null=True)

class ContactRole(models.Model):
contact_no = models.ForeignKey(Contact, primary_key=True, db_column='contact_no')
role_code = models.CharField(primary_key=True, max_length=16)
role_scope_code = models.CharField(primary_key=True, max_length=16)

联系人可以而且几乎总是有许多联系人角色。

我想要一个联系人列表,其中相关 ContactRole 的 role_scope_code 为“foo”。我知道我可以通过以下方式获取此信息:

Contact.objects.filter(contactrole__role_scope_code='foo')

想要的是查询集中的每个联系人都有一个 .contactrole 属性。它将是 role_scope_code 为“foo”的 ContactRole。 相反,我得到了一组与 contact_no 匹配的所有 ContactRole,因此要获取 ContactRole 的属性,我必须执行以下操作:

contacts = Contact.objects.filter(contactrole__role_scope_code='foo')
for contact in contacts:
print contact.contactrole_set.filter(role_scope_code='foo')[0].role_code

我必须对 role_scope_code 进行两次过滤!这看起来一点也不干。我正在寻找的是一个查询,它可以让我拥有一个像这样工作的集合:

contacts = Contact.objects.filter(contactrole__role_scope_code='foo')
for contact in contacts:
print contact.contactrole.role_code

我一生都想不出如何告诉 Django 仅返回与我应用于父对象的过滤器相匹配的相关对象。

最佳答案

如果联系人只有一个联系人角色,OneToOneField 将解决此问题。 OneToOneField 为您提供您正在寻找的 api。因此,不要使用 ForeignKey,而是使用 OneToOneField

关于python - 从 Django ORM 只获取一个相关对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25792226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com