Последний параграф документации по вариантам полей модели объясняет, как этого добиться:
.. добавить кортеж к вариантам, содержащим None; например (None, 'Your String For Display').
Итак, в your models.py:
GENDER = (
(None, 'Choose your gender'),
('male', 'male'),
('female', 'female'),
('custom', 'custom'),
('Prefer Not To Say', 'Prefer Not To Say'),
)
Вам, вероятно, потребуется изменить свой views.py, потому что вы были привязаны к формам перед проверкой, было ли request.method
«POST». Следующее следует за логами c , рекомендованными в документации :
def profile_edit(request):
if request.method == 'POST':
updateform = UpdateUserForm(request.POST, instance=request.user)
profileeditform = ProfileEditForm(request.POST, instance=request.user.profile)
if updateform.is_valid() and profileeditform.is_valid():
updateform.save()
profileeditform.save()
messages.info(request, 'Your profile was successfully updated!')
return redirect('site:profile-edit')
else:
updateform = UpdateUserForm(instance=request.user)
profileeditform = ProfileEditForm(instance=request.user.profile)
context = {
'updateform': updateform,
'profileeditform': profileeditform,
'gender': gender,
}
return render(...)
Обновите файл forms.py и назначьте виджет (это необходимо, если вы хотите установить имена классов и т. Д. c):
class ProfileEditForm(forms.ModelForm):
class Meta:
model = Profile
fields = (
'bio',
'phone',
'gender',
)
widgets = {
'gender': forms.Select(attrs={'class': 'custom-select md-form'}),
}
Тогда вы сможете просто отобразить поле формы в своем шаблоне:
{{ profileeditform.gender }}