简体   繁体   English

使用相关名称反向查找

[英]Reverse look-up with related name

Suppose these models:假设这些模型:

class Person (models.Model):
    pass

and

class Marriage (models.Model):
    person = models.ForeignKey(Person, on_delete = models.CASCADE, related_name='person')
    person_2 = models.ForeignKey(Person, on_delete = models.CASCADE, related_name='person_2')

How can I filter persons through the ID of a Marriage field (eg the ID)?如何通过婚姻字段的 ID(例如 ID)过滤人员? That is, my goal is to do something like Person.objects.filter(marriage__id=32).也就是说,我的目标是做类似 Person.objects.filter(marriage__id=32) 的事情。 I understand that the related name has some role there, but for example Person.objects.filter(person_2__marriage__id=32) doesn't seem to work either.我知道相关名称在那里有一些作用,但例如 Person.objects.filter(person_2__marriage__id=32) 似乎也不起作用。

Thank you!谢谢!

It'd say you can remove the related_name and use the following construct:它会说您可以删除related_name并使用以下构造:

mariage = Mariage.objects.get(id=32)
person = mariage.person
person2 = mariage.person_2

However, it depends on what you're trying to achieve.但是,这取决于您要实现的目标。 With something like:像这样:

class Marriage (models.Model):
    person = models.ForeignKey(Person, on_delete = models.CASCADE, related_name='mariage_person_1')
    person_2 = models.ForeignKey(Person, on_delete = models.CASCADE, related_name='mariage_person_2')

You should be able to run queries such as:您应该能够运行查询,例如:

from django.db.models import Q
query = Q(mariage_person_1=32) | Q(mariage_person_2=32)
persons = Person.objects.filter(query)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM