Я пытаюсь зарегистрировать сотрудника в моей базе данных через форму, но получаю ошибку
У меня есть две модели 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