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
)
Вернуться на верх