Как передать значение user_type (в модели CustomUser), передаваемое в форму модели?
Я прошел через множество вопросов и ответов в SO и пробовал различные решения. Но я не уверен, в чем проблема: в форме (CustomUserForm или StaffCreateForm - ни то, ни другое не решает эту проблему), в представлении или в том, как настроен user_type. Любая подсказка будет высоко оценена.
В модели CustomUser перечислены 3 типа_пользователей. Форма отображает выпадающее меню с 3 вариантами выбора. Независимо от моего выбора, я получаю ошибку: Select a valid choice. 2 is not one of the available choices.
Как передать значение для сохранения формой?
#models.py
class CustomUser(AbstractUser):
user_type_data = ((1, "HOD"), (2, "Staff"), (3, "Student"))
user_type = models.CharField(default=1, choices=user_type_data, max_length=10)
#views.py
class StaffCreateView(CreateView):
model = Staff
form_class = StaffCreateForm
context_object_name = 'staff'
success_url = reverse_lazy('staff_list')
#forms.py
class CustomUserCreateForm(UserCreationForm):
class Meta:
model = CustomUser
fields = UserCreationForm.Meta.fields
fields = ('user_type', 'username', 'email', 'first_name', 'last_name', 'subject')
subject = forms.ModelMultipleChoiceField(
queryset=Subject.objects.all(),
widget=forms.CheckboxSelectMultiple
)
class StaffCreateForm(CustomUserCreateForm):
model = Staff
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['subject'].queryset = Subject.objects.all()
self.fields['user_type'].initial = "2"
Когда я использовал "Inspect Elements" в браузере, поле выбора выглядит правильно:
<select name="user_type" class="select" id="id_user_type"> <option value="1">HOD</option> <option value="2" selected="">Staff</option> <option value="3">Student</option>
</select>
<option value="1">HOD</option>
<option value="2" selected="">Staff</option>
<option value="3">Student</option>
<select name="user_type" class="select" id="id_user_type"> <option value="1">HOD</option> <option value="2" selected="">Staff</option> <option value="3">Student</option>
</select>