Подтвердить что ты не робот

Выбор заказа в ModelForm ManytoManyField DJANGO

У меня есть мои модели .py

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

в forms.py

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

Когда я создаю форму, названия отрасли отображаются в поле множественного выбора. Что я делаю, чтобы названия отрасли были в алфавитном порядке?

4b9b3361

Ответ 1

Существует несколько способов:

Вы можете переопределить порядок запросов на основе каждой формы, задать опцию метакласса заказа или переопределить выборки диспетчера диспетчера моделей с помощью метода упорядочения.

Завершить набор запросов диспетчера моделей моделей

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

Указать глобальное упорядочение метаданных

class Industry(models.Model):
    name = models.CharField(max_length=128)

    class Meta:
        ordering = ['name']

Порядок сортировки по форме

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

Также есть ярлык с именем formfield_for_manytomany, если вы имеете дело с администратором django.

Ответ 2

Как он указывает в этом ответе, вам нужно будет использовать через, чтобы измените порядок.

Ответ 3

Мне нравится этот метод:

class BusinessForm(forms.ModelForm):

    class Meta:
        model = Business

    industry = forms.ModelMultipleChoiceField(
               queryset=Industry.objects.order_by('name'))

Мне это нравится, так как оно не изменяет модель базы данных и поскольку оно является декларативным (меньшее программирование).