Я хочу передать параметр isloggedin пользователю во внешнем интерфейсе django - PullRequest
0 голосов
/ 13 июня 2019

Я передаю список пользовательских объектов во внешний интерфейс. Интерфейс хочет отображать информацию о пользователях, вошедших в систему, отдельно и информацию о других пользователях отдельно. Для этого я хочу передать одно дополнительное поле в сериализаторе пользователей. Я использую наборы и сериализаторы для передачи списка пользователей во внешний интерфейс django. Как мне это сделать.

Мой сериализатор выглядит как

class SomeUserSerializer(serializers.ModelSerializer):
    """
    Serializer for `some_user` table
    """
    isLogedInUser = serializers.SerializerMethodField('is_logged_in_user')
    user = UserSerializer(many=False)

    def is_logged_in_user(self, request):
        return self.user==request.user

    class Meta:
        model = SomeUser
        fields = ('user', 'something', 'isLogedInUser')

Что-то не так с моим методом is_logged_in_user. Он должен возвращать флаг true или false вместе с объектом пользователя в зависимости от того, является ли он в настоящий момент зарегистрированным пользователем

1 Ответ

0 голосов
/ 13 июня 2019

Метод сериализатора, используемый isLogedInUser, принимает аргумент с именем request.Однако, согласно документации , метод вызывается с сериализуемым объектом, экземпляром SomeUser.

. Вам необходимо изменить аргумент и получить запрос через дополнительный контекст , например:

    class SomeUserSerializer(serializers.ModelSerializer):
        """
        Serializer for `some_user` table
        """
        isLogedInUser = serializers.SerializerMethodField('is_logged_in_user', context={'request': request})
        user = UserSerializer(many=False)

        def is_logged_in_user(self, obj):
            return obj.user == self.context['request'].user

        class Meta:
            model = SomeUser
            fields = ('user', 'something', 'isLogedInUser')
...