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")