Я пытаюсь зарегистрировать сотрудника в моей базе данных через форму, но получаю ошибку

У меня есть две модели staff и UserAddress и я пытаюсь добавить сотрудников через модели. Но я получаю эту ошибку: AttributeError at /accounts/signup/staff/ У объекта 'NoneType' нет атрибута 'add'. Что мне теперь делать, может ли кто-нибудь помочь мне? Я хотел зарегистрировать сотрудника, но произошла такая вещь.

models.py:

class UserAddress(models.Model):
    city = models.CharField(max_length=100)
    address = models.CharField(max_length=200)
    zip_code = models.CharField(max_length=15, blank=True)

    def __str__(self):
        return str(self.id)


class CustomUser(AbstractUser):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    email = models.EmailField(unique=True)
    user_address = models.ForeignKey(UserAddress, on_delete=models.CASCADE, null=True)


class Staff(CustomUser):
    def save(self, *args, **kwargs):
        if not self.id:
            self.is_staff = True
            self.is_superuser = False
            return super(Staff, self).save(*args, **kwargs)

    class Meta:
        proxy = True

forms.py:

class StaffCreationForm(UserCreationForm):
    first_name = forms.CharField(max_length=100, required=True)
    last_name = forms.CharField(max_length=100, required=True)
    email = forms.EmailField(required=True)

    city = forms.CharField(max_length=100)
    address = forms.CharField(max_length=100)
    zip_code = forms.CharField(max_length=15, required=True)

    class Meta(UserCreationForm.Meta):
        model = CustomUser

    @transaction.atomic
    def save(self):
        user = super().save(commit=False)
        user.first_name = self.cleaned_data.get("first_name")
        user.last_name = self.cleaned_data.get("last_name")
        user.email = self.cleaned_data.get("email")
        user.is_staff = True
        user.save()

        address = UserAddress.objects.create(city=self.cleaned_data.get("city"),
                                             address=self.cleaned_data.get("address"),
                                             zip_code=self.cleaned_data.get("zip_code"))

        user.user_address.add(address)

        return user

views.py:

class StaffSignUpView(CreateView):
    model = CustomUser
    form_class = StaffCreationForm
    template_name = "accounts/signup_user.html"

    def get_context_data(self, **kwargs):
        kwargs["user_type"] = "staff"
        return super().get_context_data(**kwargs)

    def form_valid(self, form):
        user = form.save()
        login(self.request, user)
        return redirect("home")

Ваш объект user.user_address не содержит никакого значения, поэтому вы получаете эту ошибку
'NoneType' object has no attribute 'add', потому что по умолчанию его значение None, а тип данных None не содержит метода add(), поэтому попробуйте следующее

 user.user_address = address
 user.save() # don't forget to save user

присвоит объекту адреса user.user_address

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