Обратный поиск с родственным названием

Предложим эти модели:

class Person (models.Model):
    pass

и

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')

Как я могу фильтровать персон по ID поля Marriage (например, ID)? То есть, моя цель - сделать что-то вроде Person.objects.filter(marriage__id=32). Я понимаю, что связанное имя играет какую-то роль, но, например, Person.objects.filter(person_2__marriage__id=32) тоже не работает.

Спасибо!

Вы можете убрать related_name и использовать следующую конструкцию:

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

Однако, это зависит от того, чего вы пытаетесь достичь. С чем-то вроде:

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')

Вы должны уметь выполнять такие запросы, как:

from django.db.models import Q
query = Q(mariage_person_1=32) | Q(mariage_person_2=32)
persons = Person.objects.filter(query)
Вернуться на верх