Здесь много хороших ответов, но я все еще не совсем удовлетворен реализациями. Я также немного разочарован тем, что выбор виджетов из разных источников (внешние ключи, выбор) приводит к разному поведению.
У меня есть дизайн, с которым я работаю, где в полях выбора всегда есть пустой параметр, и если они требуются, рядом с ними будет звездочка, а форма просто не будет проверена, если остались пустыми. Тем не менее, я могу корректно переопределить empty_label только для полей, которые не TypedChoiceField
s.
Вот как будет выглядеть . Первым результатом всегда является имя поля - в моем случае, label
.
Вот что я в итоге сделал. Ниже приведен переопределенный __init__
метод моей формы:
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
for _, field in self.fields.items():
if hasattr(field, 'empty_label'):
field.empty_label = field.label
if isinstance(field, forms.TypedChoiceField):
field.choices = [('', field.label)] + [choice for choice in field.choices if choice[0]]