Как получить объект обратной связи 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
Но это не работает.
не нужно использовать аннотацию или подзапрос. Есть ли способ реализовать это таким образом?