Пользовательский сериализатор drf возвращает пользовательские данные

Я пытался создать приложение drf и хотел добиться представления входа, которое выполняло бы две задачи:

  1. set's the cookies automatically
  2. returns the url and the username of the user

проблема конкретно в функции validate внутри кода сериализатора

views.py:

class CookieTokenObtainPairView(TokenObtainPairView):
    def finalize_response(self, request, response, *args, **kwargs):
        if response.data.get("refresh"):
            # the cookie part works well
            # the part that doesn't is in the serializer below

            # tried to do the UserLoginSerializer(data=request.data)
            user = UserLoginSerializer.validate(data=request.data)
            if user.is_valid():
                user = user.validate(data=request.data)
                response.data["user"] = user.data if user.is_valid() else user.errors
            else:
                response.data["user"] = user.errors
        return super().finalize_response(request, response, *args, **kwargs)

serializers.py

class UserLoginSerializer(serializers.HyperlinkedModelSerializer):
    password = serializers.CharField(style={"input type": "password"}, write_only=True)

    #
    class Meta:
        model = User
        fields = (
            "id",
            "url",
            "username",
            "password",
        )
        # read_only_fields = ("id")

    def validate(self, data):
        data["username"] = self["username"]
        data["password"] = self["url"]
        return super().validate(data)

как вы видите, опция validate пытается получить имя пользователя и данные url, чтобы вернуть его, но я не нахожу хорошего способа получить их каждый раз, когда он говорит, что у self нет значения username или что-то еще, пробовал все эти варианты:

  • self.username
  • self["username"]
  • self.get["username"]
  • self.get.username

Так что любой хороший способ вернуть нужные мне значения я надеюсь на вашу помощь

В вашей функции validate вы не можете получить доступ к self['username'] - вы можете получить доступ к пользовательским данным только через self.instance; но, в противном случае, вы можете получить доступ к экземпляру, только если вы передали его сериализатору в конструкции типа:

user_serializer = UserLoginSerializer(data=request.data, instance=user_obj)

Что вам нужно после входа пользователя в систему, поэтому я рекомендую вам этот пост: Login and Register User Django Rest Framewrok; я почти уверен, что вы сможете получить то, что вам нужно там.

Вернуться на верх