我正在尝试通过表格在我的数据库中注册一名员工,但我收到错误

I am trying to register a staff in my database throuout the form But I get error

我有两个模型 staff 和 UserAddress,我正在尝试通过模型添加人员。但我收到此错误: /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' 因为默认值是 NoneNone 数据类型不包含 add() 方法所以试试这个

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

这会将地址对象分配给 user.user_address