Как сохранить пользовательские поля с пользовательскими данными на Django? - PullRequest
0 голосов
/ 04 апреля 2020

Я создал класс «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)

Но это выглядит странно для меня? вид / форма / модель не должны автоматически сохранять мои "пользовательские" поля вместе с "основной" информацией пользователя? Как мне это сделать?

1 Ответ

1 голос
/ 04 апреля 2020

Вам не нужно снова определять «company_name», «company_department» и «company_employees_quantity», вы можете добавить их в атрибут fields.

Попробуйте выполнить следующее:

class AccountCreationForm(UserCreationForm):
    class Meta:
        model = Account
        fields = (
            'username',
            'email',
            'company_name',
            'company_department',
            'company_employees_quantity',
        )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...