Невозможно присвоить "str", это должен быть экземпляр "User".

Я пытаюсь сделать post-запрос к django rest api из reactjs, но трассировка показывает, ValueError: Cannot assign "<django.contrib.auth.models.AnonymousUser object at 0x00000247410D3670>": "BuildingClearance.resident_number" must be a "User" instance.

models.py

class BuildingClearance(models.Model):
    
    resident_number = models.ForeignKey(to=User, to_field="resident_number", on_delete=models.CASCADE)
    request_number = models.AutoField(primary_key=True)
    maintenance_type = models.CharField(max_length=100, blank=False)
    approval = models.BooleanField(default=False) 

views.py

class BuildingClearanceList(ListCreateAPIView):
    
    permission_classes = [AllowAny]
    serializer_class = BuildingClearanceSerializer
    queryset = BuildingClearance.objects.all()

    
    def perform_create(self, serializer):
        return serializer.save(resident_number=self.request.user)
    
    def get_queryset(self):
        return self.queryset.filter(resident_number=self.request.user)

class BuildingClearanceView(RetrieveUpdateDestroyAPIView):
    
    serializer_class = BuildingClearanceSerializer
    queryset = BuildingClearance.objects.all()

    
    def perform_create(self, serializer):
            return serializer.save(resident_number=self.request.user)
    
    def get_queryset(self):
        return self.queryset.filter(resident_number=self.request.user)

serializers.py

class BuildingClearanceSerializer(ModelSerializer):

    class Meta:
        model=BuildingClearance
        exclude = ['resident_number']

Если я устанавливаю permission_classes в [isAuthenticated], сообщение об ошибке будет 401 unauthorized (Authentication credentials were not provided), даже если я включил правильные заголовки:

services.js

const API_URL = "http://127.0.0.1:8000/api/forms/";

buildingClearance(maintenance_type) {
        var token = JSON.parse(localStorage.getItem('user')).access;
        console.log(token)
        return axios
        .post(API_URL + "building/", {
            headers:{
                Accept: 'application/json',
                Authorization: 'Bearer ' + token
            },
            maintenance_type

        })
    }

замените этот код

class BuildingClearance(models.Model):
    
    resident_number = models.ForeignKey(to=User, to_field="resident_number", on_delete=models.CASCADE)
   
   resident_number = models.ForeignKey(User, to_field="resident_number", on_delete=models.CASCADE) 

Чтобы прочитать больше информации о моделях https://docs.djangoproject.com/en/4.0/topics/db/models/

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