Невозможно получить текущего пользователя в сериализаторе django rest

Я не могу получить текущего пользователя в сериализаторе. Я передал контекст, но все равно получаю ошибку типа

"user": [
        "This field is required."
    ]


#Serializer.py

class AddressSerializer(ModelSerializer):
    class Meta:
        model = Address
        fields = "__all__"

    def create(self, validated_data):
        request = self.context["request"]
        validated_data["user"] = request.user
        return super().create(validated_data)

#Views.py

class AddAddress(APIView):
    permission_classes = [IsAuthenticated]

    def post(self, request):
        print(request.user)
        serializer = AddressSerializer(data=request.data, context={"request":request})
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data, 200)
        return Response(serializer.errors)

#Models.py

class Address(models.Model):
    user = models.ForeignKey(Account, on_delete=models.CASCADE)
    full_name = models.CharField(max_length=35)
    email = models.EmailField(max_length=100)
    phone = models.BigIntegerField()
    address_line_1 = models.TextField(max_length=500)
    address_line_2 = models.TextField(max_length=500)
    zip_code = models.IntegerField()
    city = models.CharField(max_length=20)
    state = models.CharField(max_length=15)
    country = models.CharField(max_length=15)

    class Meta:
        verbose_name_plural = "Address"

    def __str__(self):
        return self.full_name


Я точно не знаю, какая проблема стоит за этим

Вы можете сделать это с помощью метода save()

    class AddAddress(APIView):
        permission_classes = [IsAuthenticated]
    
        def post(self, request):
            print(request.user)
            serializer = AddressSerializer(data=request.data, context={"request":request})
            if serializer.is_valid():
                serializer.save(user=request.user)
                return Response(serializer.data, 200)
            return Response(serializer.errors)

Попробуйте это:

request = self.context.get('request', None)

вместо этого request = self.context["request"]

Поскольку user требуется в сериализаторе, это означает, что user данные должны быть отправлены при пост-запросе. Из вашего кода следует, что вы хотите добавить адрес в соответствии с пользователем, который вошел в систему. Таким образом, user не нужно отправлять на фронтенд. Попробуйте сделать следующее:

class AddressSerializer(ModelSerializer):
    class Meta:
        model = Address
        fields = "__all__"
        extra_kwargs = {
            "user": {"read_only": True}
        }

    def validate(self, attrs):
        # make sure that you have passed request in context serializer
        attrs["user"] = self.context["request"].user 
        return attrs

Это внешний ключ. Вам нужно присвоить ему id, а не всего пользователя. validated_data["user"] = request.user.id

Event hen если ошибка сохраняется, то проблема, похоже, в том, что в ваших validated_data нет поля "user". Проблема в данных, которые вы отправляете в запросе к сериализатору. Если они не соответствуют требуемым полям, то подтвержденные данные будут пустыми. Распечатайте и проверьте ваши проверенные данные, а также данные запроса.

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