Выбор заказа в ModelForm ManytoManyField DJANGO - PullRequest
24 голосов
/ 01 июля 2011

У меня в файле models.py

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

в forms.py

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

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

Ответы [ 3 ]

65 голосов
/ 01 июля 2011

Есть несколько способов:

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

Переопределить глобальный набор запросов менеджера моделей

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.

1 голос
/ 10 ноября 2017

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

class BusinessForm(forms.ModelForm):

    class Meta:
        model = Business

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

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

0 голосов
/ 01 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...