django - power - diapositiva contenido con titulo
ModelChoiceField, eliminando la opciĆ³n en blanco (1)
Si desea eliminar la opción en blanco para todos los ModelChoiceField
, podría hacer algo como ...
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
Pero eso reemplazaría a todos los ModelChoiceField
s, así que tal vez algo más detallado como:
for fieldname in (''field1'',''field2'',''field3'',''field4'',''field5'',''field6''):
self.fields[fieldname].empty_label = None
¡Ciertamente más fácil que el sobrescrito __init__
que mencionaste!
Actualización de Moritz
Puedes usar el uso 2017+:
forms.ModelChoiceField(... empty_label=None
Quiero deshacerme de la opción "-------------" que Django agrega en una entrada de selección que representa una clave externa en un ModelForm
Se ha respondido que puede usar la opción empty_label=none
, pero tengo un ModelForm, no un formulario regular y no está permitido anular el campo.
Sé que puedo anular el __init__()
del ModelForm para modificar un queryset de ModelChoiceField usando
self.fields[''my_foreign_key''].queryset = ....
Pero esto sería realmente feo, ya que esto ocurre con más de 10 teclas foráneas en el modelo "Principal", y hay más que un modelo basado en este modelo.
Todo el contexto:
- cada una de estas claves foráneas apunta al mismo tipo de modelos: son listas particulares de opciones, muchos modelos para facilitar su modificación a través del administrador.
- Todos estos modelos están relacionados con el modelo principal mediante una relación "to_field = code", basada en un Charfield que contiene un código de tres letras (bueno, no es mi culpa, tuve que usar una base de datos de MS Access heredada), este CharField tiene Las opciones
blank=True, unique=True
, así que, para cada lista, puedo crear un registro"---No information yet---"
que tiene, apuesta, un valor en blanco en lugar de un código de tres letras ...
La situación es ahora: obtengo un campo de entrada de selección con dos opciones de "valor en blanco": el django uno y el mío, uno después del otro. Solo me olvido de la opción ''empty_label = none'' aquí también ...