Я пытаюсь создать пользовательское поле формы в Django.Пользовательское поле формы в Django
class CustomTypedMultipleChoiceField(MultipleChoiceField):
def __init__(self, *args, **kwargs):
self.coerce = kwargs.pop('coerce', lambda val: val)
self.empty_value = kwargs.pop('empty_value', [])
super(CustomTypedMultipleChoiceField, self).__init__(*args, **kwargs)
def to_python(self, value):
"""
Validates that the values are in self.choices and can be coerced to the
right type.
"""
value = super(CustomTypedMultipleChoiceField, self).to_python(value)
if value == self.empty_value or value in self.empty_values:
return self.empty_value
new_value = []
for choice in value:
try:
new_value.append(self.coerce(choice))
except (ValueError, TypeError, ValidationError):
raise ValidationError(self.error_messages['invalid_choice'] % {'value': choice})
return new_value
def validate(self, value):
if value != self.empty_value:
super(CustomTypedMultipleChoiceField, self).validate(value)
elif self.required:
raise ValidationError(self.error_messages['required'])
Я получаю ошибку CustomTypedMultipleChoiceField
не имеет атрибута empty_values
. Это тот же самый код, который построил Django в построившемся TypedMultipleChoiceField
. Поэтому я не понимаю, почему я получаю эту ошибку. Я также думал о подклассификации TypedMultipleChoiceField
, но я хотел, чтобы его ошибка отличалась в методе to_python
и не хотела возвращать значение, поэтому выбрал этот метод. Пожалуйста, помогите мне.
Какая версия Django вы используете? –
Django 1.5.1 - это версия, которую я использую. Что это нужно сделать? –