Django - как использовать UpdateView modelform с пользовательским полем?

Я хочу использовать пользовательское поле формы с UpdateView. Мой код на данный момент таков:

models.py

class CustomUser(AbstractUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    paper = models.BooleanField(default=False)
    pronouns = models.CharField(max_length=50, blank=True)

    def __str__(self):
        return self.username

forms.py

class CustomUserProfileForm(forms.ModelForm):
    pronouns = forms.CharField(label='Pronouns', required=True)

    class Meta:
        model = get_user_model()
        fields = ('first_name', 'last_name')

    def __init__(self, *args, **kwargs):
        _pronoun_list = ('he/him/his', 'she/her/hers', 'they/them/theirs')
        super(CustomUserProfileForm, self).__init__(*args, **kwargs)

        self.fields['pronouns'].widget = ListTextWidget(
            data_list=_pronoun_list, name='pronoun-list')

Эта форма ссылается на ListTextWidget, хотя я не думаю, что она имеет прямое отношение к моей проблеме:

class ListTextWidget(forms.TextInput):
    def __init__(self, data_list, name, *args, **kwargs):
        super(ListTextWidget, self).__init__(*args, **kwargs)
        self._name = name
        self._list = data_list
        self.attrs.update({'list': 'list__%s' % self._name})

    def render(self, name, value, attrs=None, renderer=None):
        text_html = super(ListTextWidget, self).render(
            name, value, attrs=attrs)
        data_list = '<datalist id="list__%s">' % self._name
        for item in self._list:
            data_list += '<option value="%s">' % item
        data_list += '</datalist>'

        return (text_html + data_list)

Views.py

class CustomUserProfileview(UpdateView):
    model = CustomUser
    form_class = CustomUserProfileForm
    template_name = 'account/customuser_change_form.html'
    success_url = reverse_lazy('home')

    def form_valid(self, form):
        user = self.request.user
        pronouns = form.cleaned_data['pronouns']
        user.pronouns = pronouns
        user.save()
        return super().form_valid(form)

Форма отображается, как я и ожидал, где я могу изменить имя, фамилию и выбрать местоимения из списка. Если я print(user) и print(pronouns), я получаю ожидаемые результаты, но поле pronouns не сохраняется для пользователя. Даже если оно сохраняется, у меня возникает ощущение, что я неправильно использую UpdateView.

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