如何在Django表单中排序ForeignKey关系的结果?
我在Django有这种型号如何在Django表单中排序ForeignKey关系的结果?,django,django-models,django-forms,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) co
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)
这个模型呢
class PersonForm(forms.ModelForm):
class Meta:
model = Person
当我在模板中使用此表单时,一切正常,但
中的国家/地区列表显得杂乱无章。我如何订购它?尝试将其添加到类元、类内人员:
ordering = ['country']
您可以使用以下属性:
class Country(models.Model):
name = models.CharField(max_length=80)
class Meta:
ordering = ["name"]
如果您将订购设置为国家/地区类别,它将根据您的需要显示它们。如果您不能或不想使用Meta model类别中的订购属性,您也可以这样做: 您需要创建一个表单对象,类似于:
from django import forms
class PersonForm(forms.ModelForm):
country = forms.ModelChoiceField(queryset=Country.objects.all().order_by('name'))
class Meta:
model = Person
这里有两个很好的答案,但我想保留模型中的
帮助\u文本
,空白
,以及其他设置,而不必重复它们,也不必更改模型上的默认顺序。以下是我所做的:
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')
基本上,我只是更新了自动添加字段上的查询集,以便按照我想要的方式进行排序。感谢您无缘无故地否决了我的投票!我同意@cx42net。如果我们的答案对你不好,那就解释一下你自己,用一种我们能真正帮助你的方式。我不确定,但也许回答我问题的另一个人会先投票给你让他回答。也许我错了。重要的是你找到了问题的解决方案:)我认为这不是一个正确的解决方案,因为这迫使对模型的所有查询排序。一个原因是,即使不需要,也会对该模型上的所有查询进行排序。第二个原因是,如果有两种对订购有不同要求的表单,则无法解决问题。这将按国家id排序,而不是按国家名称排序。