模型形式ManytoManyField DJANGO中的订购选项
我的模型里有模型形式ManytoManyField DJANGO中的订购选项,django,django-models,django-forms,Django,Django Models,Django Forms,我的模型里有 class Business(models.Model): industry = models.models.ManyToManyField(Industry) 在forms.py中 class BusinessForm(forms.ModelForm): class Meta: model = Business 渲染表单时,行业名称显示在多个选择框中。如何按字母顺序排列行业名称?有几种方法: 您可以基于每个表单覆盖queryset排序,设置ord
class Business(models.Model):
industry = models.models.ManyToManyField(Industry)
在forms.py中
class BusinessForm(forms.ModelForm):
class Meta:
model = Business
渲染表单时,行业名称显示在多个选择框中。如何按字母顺序排列行业名称?有几种方法: 您可以基于每个表单覆盖queryset排序,设置ordering meta class选项,或者使用排序方法覆盖model manager queryset 覆盖全局模型管理器查询集 指定全局元选项排序 按表格订购 如果您与django管理员打交道,还有一个名为formfield的快捷方式,可供许多人使用。我喜欢这种方法:
class BusinessForm(forms.ModelForm):
class Meta:
model = Business
industry = forms.ModelMultipleChoiceField(
queryset=Industry.objects.order_by('name'))
我喜欢它,因为它不会改变数据库模型,而且它是声明性的(较少编程)。回答得很好,非常感谢!我还尝试重写all()方法,但没有成功。我使用覆盖get\u query\u set。就像一个符咒:)覆盖什么
all()
方法?我认为除了模特经理之外,没有一个是存在的。非常感谢你!这让我有一段时间很沮丧,我想补充一点,直接从字段本身获取queryset可能更合适:self.fields['industry'].queryset.order_by('name')。(假设它涉及关系字段)否则,您复制了通过此字段编辑的关系类。
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')
class BusinessForm(forms.ModelForm):
class Meta:
model = Business
industry = forms.ModelMultipleChoiceField(
queryset=Industry.objects.order_by('name'))