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).