Django REST Framework: Как сохранить набор запросов, если я использую один и тот же объект Prepetch несколько раз в prefetch_related?

Нам нужно использовать queryset, сохраненный annotate в двух моделях в prefetch_related следующим образом, но если мы используем его следующим образом, то prefetch queryset будет вызываться без необходимости столько раз, сколько указано в prefetch_related Если вы используете

Является ли это правильным поведением?

#views.py

prefetch = Prefetch(
    "user",
    queryset=User.objects.annotate(
        is_verified=Max(
            Cast(
                "emailaddress__verified",
                output_field=IntegerField(),
            )
        )
    ),
)

queryset = queryset.prefetch_related(
    Prefetch(
        "reply_set",
        queryset=Reply.objects.prefetch_related(prefetch)
    ),
    prefetch,
)
#serializers.py

class UserDetailSerializer(serializers.ModelSerializer):
    is_verified = serializers.SerializerMethodField()

    class Meta:
        model = User
        fields = (
            "is_verified",
        )

    def get_is_verified(self, user):
        return bool(user.is_verified)

class CommentSerializer(serializers.ModelSerializer):
    user = UserDetailSerializer(read_only=True)
    replies = serializers.SerializerMethodField()

    class Meta:
        model = Comment
        fields = (
            "replies",
        )

    def get_replies(self, obj):
        queryset = obj.reply_set
        if queryset.exists():
            replies = ReplySerializer(queryset, context=self.context, many=True).data
            return replies
        else:
            return None

class ReplySerializer(serializers.ModelSerializer):
    user = UserDetailSerializer(read_only=True)

    class Meta:
        model = Reply
        fields = ("user")
Вернуться на верх