在ModelForm ManytoManyField DJANGO中订购选择

Eva*_*611 24 django django-models django-forms

我有我的models.py

class Business(models.Model):
   industry = models.models.ManyToManyField(Industry)
Run Code Online (Sandbox Code Playgroud)

在forms.py中

class BusinessForm(forms.ModelForm):
    class Meta:
        model = Business
Run Code Online (Sandbox Code Playgroud)

当我渲染表单时,行业名称出现在多个选择框中.如何按字母顺序排列行业名称?

Yuj*_*ita 65

有几种方法:

您可以基于每个表单覆盖查询集排序,设置排序元类选项,或使用排序方法覆盖模型管理器查询集.

覆盖全局模型管理器查询集

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()
Run Code Online (Sandbox Code Playgroud)

指定全局元选项排序

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

    class Meta:
        ordering = ['name']
Run Code Online (Sandbox Code Playgroud)

按形式订购

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')
Run Code Online (Sandbox Code Playgroud)

如果您正在处理django管理员,还有一个名为formfield_for_manytomany的快捷方式.