gpt4 book ai didi

django 查询过滤选择相关

转载 作者:行者123 更新时间:2023-12-02 22:15:21 25 4
gpt4 key购买 nike

这里的person是请求返回的person对象

PersonAddressBook.objects.select_related().get(person = person).client

上面的代码返回客户端对象,我如何重写它以返回多个客户端。一个人对象可能在多个 personaddressbook 中,所以过滤而不是获取是我想要做的,但我想要客户端对象而不使用 for 循环

还有其他模型的样子

class Client:
#stuff here

class Person:
#stuff here

class PersonAddressBook:
client = models.ForeignKey(Client)
person = models.ForeignKey(Person)

这可行,但它会花费更长的时间并使用更多的内存,因为它会加载到我的系统上,我只想使用数据库。

clients =[]
adbook = PersonAddressBook.objects.filter(person = person).select_related()
for contact in adbook:
clients.append(contact.client)

最佳答案

可以在Client模型中使用PersonAddressBook的related_name:

Client.objects.filter(personaddressbook__person=person)

根据documentation应该personaddressbook_set__person,但由于某些我目前不知道的原因,相关名称是以不同的方式生成的。)

我更喜欢明确指定 related_name:

class Client(models.Model):
pass

class Person(models.Model):
pass

class PersonAddressBook(models.Model):
client = models.ForeignKey(Client, related_name='addressbooks')
person = models.ForeignKey(Person, related_name='addressbooks')

现在您可以在查询中使用字段addressbooks:

Client.objects.filter(addressbooks__person=person)

关于django 查询过滤选择相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14573562/

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