I want to get rid of the "-------------" choice Django adds in a select input representing a Foreign Key on a ModelForm
It's been answered that you can use the empty_label=none
option, but I have a ModelForm, not a regular form and overriding the field is not allowed.
I know that I can override the __init__()
method of the ModelForm in order to modify a ModelChoiceField's queryset using
self.fields['my_foreign_key'].queryset = ....
But this would be really ugly, as this happens over +10 foreign_keys on the "Main" model, and there's more than a Modelform based on this model
The whole context :
blank=True, unique=True
options, so I could, for each list, create a "---No information yet---"
record which has, you bet, a blank value instead of a three letter code...The situation is now : I get a select input field with two "blank value" choices : the django one and mine, one after the other. I just miss a 'empty_label=none` option here too...
If you want to remove the blank choice for all ModelChoiceField
you could do something like..
class Form(forms.ModelForm): class Meta: model = MyModel def __init__(self, *args, **kwargs): super(Form, self).__init__(*args, **kwargs) modelchoicefields = [field for field_name, field in self.fields.iteritems() if isinstance(field, forms.ModelChoiceField)] for field in modelchoicefield: field.empty_label = None
But that would replace all ModelChoiceField
s, so maybe something more fine grained like:
for fieldname in ('field1','field2','field3','field4','field5','field6'): self.fields[fieldname].empty_label = None
Certainly easier than the __init__
overwrite you mentioned!
You can use 2017+ use:
forms.ModelChoiceField(... empty_label=None
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With