seg*_*aco 14 django django-models django-forms
我在Django中有这个模型
class Country(models.Model):
name = models.CharField(max_length=80)
class Person(models.Model):
first_name = models.CharField(max_length=100, db_index=True)
last_name = models.CharField(max_length=100, db_index=True)
country = models.ForeignKey(Country)
Run Code Online (Sandbox Code Playgroud)
和这个ModelForm
class PersonForm(forms.ModelForm):
class Meta:
model = Person
Run Code Online (Sandbox Code Playgroud)
当我在模板中使用此表单时,一切正常,但在国家列表中<select>
出现无序.我怎么订购?
Cyr*_* N. 21
您可以使用订购属性:
class Country(models.Model):
name = models.CharField(max_length=80)
class Meta:
ordering = ["name"]
Run Code Online (Sandbox Code Playgroud)
如果将排序设置为Country类,则应根据需要显示它们.
如果您不能或不想在模型的Meta类中使用排序属性,您也可以这样做:
你需要创建一个Form对象,例如:
from django import forms
class PersonForm(forms.ModelForm):
country = forms.ModelChoiceField(queryset=Country.objects.all().order_by('name'))
class Meta:
model = Person
Run Code Online (Sandbox Code Playgroud)
这里有2个很好的答案,但我想保留help_text
,blank
并从模型中的其他设置,而无需赘述,也不会改变模型上的默认排序.这是我做的:
class PersonForm(forms.ModelForm):
class Meta:
model = Person
def __init__(self, *args, **kwargs):
super(PersonForm, self).__init__(*args, **kwargs)
self.fields['country'].queryset = self.fields['country'].queryset.order_by('name')
Run Code Online (Sandbox Code Playgroud)
基本上我只是在自动添加的字段上更新了查询集,以便按照我想要的方式进行排序.
归档时间: |
|
查看次数: |
8245 次 |
最近记录: |