У меня есть эти моделиПолучить один, связанный объект в одном запросе для Django ORM
class Book(models.Model):
title = models.CharField(max_length=255, blank=False, null=False)
class Like(models.Model):
user = models.ForeignKey(User, related_name="like_user", blank=False, null=False)
book = models.ForeignKey(Book, related_name="like_book", blank=False, null=False)
class Meta:
unique_together = ["user", "book"]
Я хочу, чтобы получить все книги и проверить, если текущий пользователь любил каждую книгу в одном запросе
Book.objects.select_related('like_book').all()
вон не работает из-за многих результатов
Book.objects.prefetch_related('like_book').all()
будет кэшировать like_set
, но он будет содержать все понравившиеся для этой книги. Не только для этого пользователя.
В конце концов, я хочу иметь дополнительное поле is_liked
books = Book.objects.MAGIC_FETCH('like_book', user=self.request.user).all()
books[0].is_liked
Посмотрите на этот ответ, который делает что-то очень похожее на то, что вы хотите: http://stackoverflow.com/a/30650380/3955830 – solarissmoke
@solarissmoke очень близко к тому, что я хочу. Думаю, я мог бы использовать его в качестве ответа на мой вопрос. Но все же интересно, если это любой способ сделать это более элегантным без внешнего запроса. Но большое спасибо –