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.