Django: набор запросов с использованием __gte показывает неверные результаты после сериализации - PullRequest
0 голосов
/ 03 июля 2019

У меня очень странная проблема при отображении отфильтрованных результатов.

Вот мой метод API:

...
    @list_route(methods=['GET'], url_path='internal-users')
    def internal(self, request, *args, **kwargs):
        users = models.User.objects.internal_users()

        data = self.get_serializer(users, many=True, context={'request': request}).data

        return response.Ok(data)
... 

Вот вызов internal_users() модели User:

...
    def internal_users(self) -> Union[QuerySet, List['User']]:
        queryset = super(UserManager, self).get_queryset()

        queryset = queryset.filter(role_policy__gte=constants.UserRolePolicy.editor) # role_polict >= 63

        return queryset
...

До этого момента элемент управления -> показывает правильное формирование запроса и результаты.

...
    @list_route(methods=['GET'], url_path='internal-users')
    def internal(self, request, *args, **kwargs):
        users = models.User.objects.internal_users()
        # -> correct results
        data = self.get_serializer(users, many=True, context={'request': request}).data

        return response.Ok(data)
... 

enter image description here

Однако, как только я передаю свои объекты в сериализатор в следующей строке, результаты автоматически уменьшаются только до тех пользователей, у которых роль role_policy.РАВНО 63.

Вот сериализатор:

class UserListSerializer(serializers.ModelSerializer):
    class Meta:
        model = models.User
        fields = [
            'id',
            'uuid',
            'email',
            'given',
            ...
            'phone',
        ]

В чем может быть проблема?Пожалуйста помоги.

1 Ответ

0 голосов
/ 04 июля 2019

Мой плохой. role policy является текстовым полем, а не целочисленным полем. Вот почему __gte не работает.

Это довольно вводит в заблуждение от Django, хотя запрос был сформирован идеально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...