specified has formularios form fields example django django-models django-forms

has - Opciones de pedido en ModelForm ManytoManyField DJANGO



post django (3)

Tengo en mi models.py

class Business(models.Model): industry = models.models.ManyToManyField(Industry)

en forms.py

class BusinessForm(forms.ModelForm): class Meta: model = Business

Cuando presento el formulario, los nombres de la industria aparecen en un cuadro de selección múltiple. ¿Qué debo hacer para que los nombres de la industria estén en orden alfabético?


Como se señala en esta respuesta , deberá utilizarla para cambiar el orden.


Hay varias formas:

Puede anular el orden de los conjuntos de consultas por formulario, establecer la opción de metaclase de ordenamiento o anular el conjunto de preguntas del administrador de modelos con un método de ordenamiento.

Sobrescribir el conjunto de preguntas del administrador del modelo global

class IndustryManager(models.Manager): def get_query_set(self): return ( super(IndustryManager, self) .get_query_set() .order_by(''name'') ) class Industry(models.Model): name = models.CharField(max_length=128) objects = IndustryManager()

Especificar el orden global de opciones de meta

class Industry(models.Model): name = models.CharField(max_length=128) class Meta: ordering = [''name'']

Por orden de forma

class MyForm(forms.ModelForm): class Meta: model = Business def __init__(self, *args, **kwargs): super(MyForm, self).__init__(*args, **kwargs) self.fields[''industry''].queryset = Industry.objects.order_by(''name'')

También hay un atajo llamado formfield_for_manytomany si está tratando con el administrador de django.


Me gusta este método:

class BusinessForm(forms.ModelForm): class Meta: model = Business industry = forms.ModelMultipleChoiceField( queryset=Industry.objects.order_by(''name''))

Me gusta, ya que no altera el modelo de la base de datos, y ya que es declarativo (menos programación).