Я знаю, что это будет WAAAAAY позже, чем вопрос, который будет опубликован, но вот мой ответ для полноты и всех, кому это может пригодиться: -)
Я собираюсь предположить, что в AGE_GROUP ADULT, SENIOR и STUDENT являются целыми числами. Ваша очистка формы НЕ будет автоматически очищать строку, содержащуюся в POST, и возвращает целое число. Итак, в этом коде:
context = Context({
'data': order,
})
вы бы подумали, что order.age ссылается на целое число, но на самом деле это неверно. Это обожгло меня несколько раз, потому что будет правильно сохранять целое число в физической таблице, но экземпляр заказа все еще имеет строковое представление поля age.
Вы можете сделать одну из двух вещей:
1. Очистите это в поле:
clean_age(self):
return int(self.cleaned_data['age'])
или создайте новый тип поля:
def MyChoiceField(forms.ChoiceField):
def clean(self, value):
if not value:
if self.required:
raise forms.ValidationError(self.error_messages['required'])
return None
else:
return None
return int(value)
ссылка на поле формы:
age = MyChoiceField(choices=AGE_GROUP)
и тогда вы сможете применить эту логику к любому другому подобному полю выбора в будущем. Лично я считаю, что последний подход является лучшим, и я вставляю все свои типы пользовательских полей в файл form_utils, чтобы я мог использовать их везде. Другой недостаток заключается в том, что forms.charField не удаляет автоматически введенный текст, и вы также можете использовать этот подход, чтобы исправить это.