Django Rest Framework предварительная выборка данных

Я хотел бы минимизировать количество запросов для получения данных. У меня есть 3 модели:

class SubCategory(models.Model):
    game = models.ForeignKey(Game, verbose_name=_("Gra"), on_delete=models.CASCADE)
    name = models.CharField(verbose_name=_("Nazwa"), max_length=40)
    ...
class GameTask(CloneModel):
    game = models.ForeignKey(Game, verbose_name='Gra', related_name='tasks', on_delete=models.CASCADE)
    name = models.CharField(verbose_name='Nazwa', max_length=200)
    subcategory = models.ForeignKey(SubCategory, verbose_name=_("Podkategoria"), on_delete=models.SET_NULL, blank=True, null=True)
class TaskLevel(CloneModel):
    name = models.CharField(max_length=50)
    master_task = models.ForeignKey(GameTask, related_name='sub_levels', on_delete=models.CASCADE)

Мое представление подкатегорий выглядит следующим образом:

class SubCategoryList(ListAPIView, PermissionMixin):
    permission_classes = (permissions.IsAuthenticated,)
    serializer_class = SubCategorySerializer

    def get_queryset(self):
        return SubCategory.objects.filter(game=self.get_game()).order_by("slug")

и мой SubCategorySerializer:

class SubCategorySerializer(serializers.ModelSerializer):
    developments = SubCategoryDevelopmentSerializer(many=True, read_only=True)
    in_progress = serializers.SerializerMethodField()

        class Meta:
        model = SubCategory
        fields = ("id", "name", "slug", "description", "image", "developments", "in_progress")

    def get_in_progress(self, obj: SubCategory):
        user = self.context["request"].user
        subcategory_tasks = obj.gametask_set.all()
        // rest of the logic

Все, чего я хочу добиться, это возвращать только задачи, которые связаны с TaskLevel моделью как master_task. Я пытался использовать

subcategory_tasks = obj.gametask_set.all().prefetch_related("sub_levels")

но количество запросов было одинаковым. Может кто-нибудь подсказать, как это решить?

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