Я пытаюсь создать API пользователя поставщика, который имеет отношения один-к-одному с пользователем, он бросает ошибку целостности, пожалуйста, помогите мне

Ошибка целостности в проекте фреймворка Django rest.

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

  1. Код ошибки

IntegrityError at /API/accounts/signup/vendor/ Сбой ограничения NOT NULL: accounts_vendor.user_id Метод запроса: POST URL запроса: ``http://127.0.0.1:8000/api/accounts/signup/vendor/ Версия Django: 4.2.6 Тип исключения: IntegrityError Значение исключения:
NOT NULL constraint failed: accounts_vendor.user_id Местоположение исключения: C:\Users\Moses Ogiri\Desktop\medic-ecommerce\env\Lib\site-packages\django\db\backends\sqlite3\base.py, строка 328, in execute Вызвано во время: accounts.views.VendorSignupView Исполняемый файл Python: C:\Users\Moses Ogiri\Desktop\medic-ecommerce\env\Scripts\python.exe Версия Python: 3.12.0


  1. model.py

class User(AbstractBaseUser, PermissionsMixin):

    ADMIN = 1
    VENDOR = 2
    HEALTHCARE = 3
    LOGISTIC = 4
    CUSTOMER = 5
    
    ROLE_CHOICES = (
        (ADMIN, 'Admin'), 
        (VENDOR, 'Vendor'),
        (HEALTHCARE, 'Healthcare'),
        (LOGISTIC, 'Logistic'),
        (CUSTOMER, 'Customer'),
    )

    id = models.UUIDField(primary_key=True, default=uuid.uuid4,editable=False, unique=True)
        first_name = models.CharField(max_length=100, validators=[MinLengthValidator(2)], null=False)
        last_name = models.CharField(max_length=100, validators=[MinLengthValidator(2)], null=False)
    email = models.EmailField(_('email address'), max_length=100, unique=True)
    role = models.PositiveSmallIntegerField(choices=ROLE_CHOICES, blank=True, null=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_verified = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at= models.DateTimeField(auto_now=True)
    auth_provider = models.CharField(max_length=255, blank=False, null=False,    default=AUTH_PROVIDERS.get('email'))
    
    objects = UserManager()
    REQUIRED_FIELDS = ["first_name", "last_name"]
    
    USERNAME_FIELD = 'email'
    ordering = ('-created_at ',)
    
    
    def __str__(self):
        return self.email
    
    @property
    def get_full_name(self):
        return f"{self.first_name.title()} {self.last_name.title()}"
  1. serializer.py

class VendorSerializer(serializers.ModelSerializer): id = serializers.UUIDField(read_only=True)

class Meta:
    model = Vendor
    fields = [
        'id', 'company_name', 'company_logo', 
        'company_files', 'company_email', 'phone_number',
        'company_reg_no', 'description'
        ]
    
def save(self, **kwargs):
    user = super().save(**kwargs)
    user = self.context['user']
    user.role = User.VENDOR

    if self. the instance is None:
        self.instance = self.update(self.instance, self.validated_data)
        return self. instance
    
    vendor = Vendor.objects.create(**self.validated_data, user=user)
    return vendor
  1. views.py

class VendorSignupView(generics.GenericAPIView):

def get_serializer_class(self):
    return VendorSerializer

def get_queryset(self):
    return Vendor.objects.filter(user=self.request.user.id )

def get_serializer_context(self):
    return {
        'user': self.request.user.id
        }

def post(self, request):
    serializer=self.get_serializer(data=request.data)
    serializer.is_valid(raise_exception=True)
    user=serializer.save()

    return Response({
        "user": UserSerializer(user, context=self.get_serializer()).data,
        "tokens": user.tokens(),
        "message": "Account created successfully"
    })

class VendorupdateView(generics.GenericAPIView, mixins.UpdateModelMixin, mixins.RetrieveModelMixin ): def get_serializer_class(self): return VendorSerializer

def update(self, request, *args, **kwargs): instance = self.get_object() print(instance) serializer =self.get_serializer_class(instance=request.data) serializer.is_valid(raise_exception=True) self.perform_update(serializer)`ваш текст` return Response(serializer.data)

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