Как получить объект обратной связи django annotate с помощью подзапроса?

Это не очень хорошая структура, но это пример

Это мой образец модели

class Book(models.Model):
    name = models.CharField(max_length=50)

class Borrower(models.Model):
    book = models.ForeignKey(Book, on_delete=models.SET_NULL, null=True)
    name = models.CharField(max_length=50)
    age = models.IntegerField()

class OwnerCard(models.Model):
    certification_date = models.DateField()

class Owner(models.Model):
    owner_card = models.ForeignKey(OwnerCard, on_delete=models.SET_NULL, null=True)
    book = models.ForeignKey(Book, on_delete=models.SET_NULL, null=True)
    name = models.CharField(max_length=50)
    age = models.IntegerField()

Я хочу использовать обратное отношение, чтобы получить объект заемщика и владельца из модели книги

Нравится

from django.db.models import Subquery, OuterRef

Books = Book.objects.all().annotate(
            borrower=Subquery(Borrower.objects.get(user=OuterRef('user'))),
            owner=Subquery(Owner.objects.get(user=OuterRef('user')))
        )

Or

Books = Book.objects.all().annotate(
            borrower=Subquery(Borrower.objects.filter(user=OuterRef('user')).first()),
            owner=Subquery(Owner.objects.filter(user=OuterRef('user')).first())
        )

и я хочу использовать

print(Books[0].brrower.name)
>>> brrower's name

print(Books[0].owner.owner_card.certification_date)
>>> certification date

Но это не работает.

не нужно использовать аннотацию или подзапрос. Есть ли способ реализовать это таким образом?

Вернуться на верх