Я создал класс «Account», чтобы я мог получить больше столбцов с информацией о пользователе:
class Account(AbstractUser):
company_name = models.CharField(max_length=50)
company_department = models.CharField(max_length=50)
company_employees_quantity = models.IntegerField(default=1)
def __str__(self):
return self.username
Я также создал form
с этими данными, чтобы я мог получать информацию о мой взгляд.
class AccountCreationForm(UserCreationForm):
company_name = forms.CharField(max_length=50)
company_department = forms.CharField(max_length=50)
company_employees_quantity = forms.IntegerField()
class Meta:
model = Account
fields = ('username', 'email')
Проблема в том, что когда клиент отправляет данные через форму, я получаю все поля, но в базу данных вставляется только основная информация о пользователе.
class SignUpView(CreateView):
form_class = AccountCreationForm
success_url = reverse_lazy('login')
template_name = 'signup.html'
Если o добавить метод form_valid
on на view
o, можно сохранить поле данных по полю следующим образом:
class SignUpView(CreateView):
form_class = AccountCreationForm
success_url = reverse_lazy('login')
template_name = 'signup.html'
def form_valid(self, form):
if form.is_valid():
account = form.save()
account.company_name = form.cleaned_data["company_name"]
account.company_department = form.cleaned_data["company_department"]
account.company_employees_quantity = form.cleaned_data["company_employees_quantity"]
account.save()
return redirect(self.success_url)
return super().form_invalid(form)
Но это выглядит странно для меня? вид / форма / модель не должны автоматически сохранять мои "пользовательские" поля вместе с "основной" информацией пользователя? Как мне это сделать?