TLDR: Я хотел бы сериализовать группу вместе с ее именем разрешений. Но появилось много повторяющихся запросов content_type из Permission Model. Я попытался решить эту проблему с помощью предварительной выборки, но не работал. Что я делаю не так?отображение групповых разрешений, вызывающих повторяющиеся запросы в django
поэтому мой сериализатору для извлечь метод приведен ниже
class RetrieveGroupSerializer(serializers.ModelSerializer):
user_set = UserSerializer(many=True, read_only=True)
permissions = PermissionsSerializer(many=True, read_only=True)
class Meta:
model = Group
fields = ('name', 'user_set', 'permissions')
сериализатором для метода списка приведен ниже
class GroupSerializer(serializers.ModelSerializer):
user_set = UserSerializer(many=True)
permissions = PermissionsSerializer(many=True)
class Meta:
model = Group
fields = ('url', 'user_set', 'permissions')
взглядов приводится ниже
class GroupViewSet(
mixins.CreateModelMixin,
mixins.RetrieveModelMixin,
mixins.UpdateModelMixin,
mixins.ListModelMixin,
viewsets.GenericViewSet):
"""
Creates, Updates, and retrives User Groups
"""
queryset = Group.objects.all().prefetch_related('user_set').prefetch_related('permissions__content_type')
serializer_class = GroupSerializer
permission_classes = (
IsAuthenticated,
)
action_serializer_classes = {
"create": CreateGroupSerializer,
"retrieve": RetrieveGroupSerializer,
"update": UpdateGroupSerializer
}
def get_serializer_class(self):
try:
return self.action_serializer_classes[self.action]
except (KeyError, AttributeError):
return super(GroupViewSet, self).get_serializer_class()
Когда я использую метод списка Я не сталкиваюсь с любыми повторяющимися запросами, но когда я использую метод извлечения на любом si ngle group instance Я получаю много повторяющихся запросов.
Как вы можете видеть, content_type из Permission Model запрашивается 62 раза. Таким образом, я использовал prefetch_related для внешнего ключа в модели разрешений. Но результат тот же.
Но тот же набор запросов хорошо работает для метода List и не вызывает повторяющихся запросов. вы можете видеть, что ниже
Помимо проблемы с дублирующимися запросами, я также смущен, как тот же запрос может вызывать такие разные результаты?
Спасибо. проблемы там не было, просто используя JSON. – StarLord
Я с ума сходил с этими дубликатами, спасибо за этот ответ. – Alberick0
Рад, что это помогло. К сожалению, это не очевидно, что формам create/update также нужны некоторые запросы к БД для отображения самих себя. – Linovia