Django. Как передать значение в CharField с выбором в формах?
Я хочу протестировать пост запрос в моем представлении обновления. Для этого мне нужно заполнить все поля в соответствующей форме. После того, как я передал данные для всех полей, форма имеет одну ошибку, и это CharField с параметром choices. Сообщение об ошибке:
.......<ul class="errorlist"><li>user<ul class="errorlist"><li>Select a valid choice. That choice is not one of the available choices.</li></ul></li><li>position<ul class="errorlist"><li>Select a valid choice. CEO is not one of the available choices.</li></ul></li></ul>
Модель:
class Employee(models.Model):
SALES_MANAGER = 'SM'
CHIEF_SALES_MANAGER = 'CSM'
CEO = 'CEO'
POSITION_CHOICES = (
(SALES_MANAGER, 'SM'),
(CHIEF_SALES_MANAGER, 'CSM'),
(CEO, 'CEO'),
)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
user = models.OneToOneField(User, on_delete=models.CASCADE)
position = models.CharField(max_length=255, choices=POSITION_CHOICES, default=
SALES_MANAGER, null=True, blank=True)
reports_to = models.ForeignKey('self', on_delete=models.DO_NOTHING, null=True, blank=True)
birthday = models.DateField()
hire_date = models.DateField()
address = models.CharField(max_length=255)
phone_number = models.CharField(max_length=15)
pfp = ResizedImageField(size=[350, 350], upload_to='media/profile_pics/user.id/',
blank=True,default='media/profile_pics/default_pfp.png')
Вид:
class EmployeesUpdateView(LoginRequiredMixin, UpdateView):
model = Employee
template_name = 'employees/employee_update.html'
form_class = EmployeeUpdateForm
Форма:
class EmployeeUpdateForm(forms.ModelForm):
class Meta:
model = Employee
fields = ['first_name', 'last_name', 'user', 'position', 'reports_to',
'birthday', 'hire_date', 'address', 'phone_number', 'pfp']
Тест:
def test_updateview_post(self):
self.client.force_login(user=self.test_user)
response = self.client.post(reverse('employees:employee-update', kwargs={'pk': self.test_employee.pk}),
{
'first_name':'John', 'last_name': 'Smith',
'user': self.test_user, 'position': 'CEO',
'birthday': date(year=1995, month=3, day=20),
'hire_date': date(year=2019, month=2, day=15),
'address':'LA',
'phone_number': '202-555-0156',
})
print(response.context['form'].errors)
self.test_employee.refresh_from_db()
self.assertEqual(self.test_employee.first_name, 'John')
position = forms.ChoiceField(choices=POSITION_CHOICES)
Посмотрите это