此处的人是从请求中返回的人物对象
PersonAddressBook.objects.select_related().get(person = person).client
上面的代码返回客户端对象如何重写它以返回多个客户端。 一个人对象可能在多人personaddressbook中所以过滤而不是get是我想要做但我想要客户端对象而不使用for-loop
其他模型的外观如何
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)
答案 0 :(得分:5)
您可以在客户端模型中使用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)