Django Query - Как сделать фильтр Prefetch со значениями на основе корневого запроса?
Для повышения производительности я использую prefetch selected, чтобы получить все в одном запросе, как это
profile = Profile.objects.only('id','series_following').prefetch_related(
Prefetch('books_reading', queryset=Book.objects.only('id').filter(
series_id=`series_following_id`), to_attr='books')).get(user=request.user_id)
Я хочу получить все книги, которые читают с помощью series_following, но я не знаю, как поместить это в фильтр. Вот мои модели:
class Profile(models.Model):
user = models.OneToOneField(User)
series_following = models.ForeignKey('Series')
books_reading = models.ManyToManyField('Book', related_name="readers_reading_book",
null=True, blank=True)
...
class Series(models.Model):
name = models.CharField()
...
class Book(models.Model):
name = models.CharField()
series = models.ForeignKey(Series)
...
Не уверен, что ваши модели подключены так, как вы ожидаете, но как насчет чего-то подобного?
user = request.user
books = Book.objects.filter(
series = user.profile.series_following
)
Это даст вам все книги, которые имеют ту же серию, что и та, за которой следит пользователь, основываясь на его профиле.
Вы можете получить Books с помощью:
Book.objects.filter(
series__readers_reading_book__user=request.user
)