如何以Django形式订购外键关系的结果?

时间:2011-05-19 17:09:46

标签: 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)

和这个ModelForm

class PersonForm(forms.ModelForm):

    class Meta:
        model = Person

当我在模板中使用此表单时,一切正常,但<select>中的国家/地区列表似乎无序。我怎么订购呢?

5 个答案:

答案 0 :(得分:20)

您可以使用ordering属性:

class Country(models.Model):
    name = models.CharField(max_length=80)

    class Meta:
        ordering = ["name"]

如果您将排序设置为Country类,它将根据您的需要显示它们。

答案 1 :(得分:9)

如果你不能或不想在模型的Meta类中使用排序属性,你也可以这样做:

您需要创建一个Form对象,例如:

from django import forms
class PersonForm(forms.ModelForm):
    country = forms.ModelChoiceField(queryset=Country.objects.all().order_by('name'))
    class Meta:
        model = Person

field types for formsmodels

答案 2 :(得分:5)

这里有2个很好的答案,但我想保留模型中的no_of_columns = 5 Book1 =pd.read_excel("D:\Python\Book1.xlsx",header=None,name=range(no_of_columns))help_text和其他设置,而不必重复它们,也不要更改默认排序。模型。这就是我的所作所为:

blank

基本上我只是在自动添加的字段上更新了查询集,以便按照我想要的方式进行排序。

答案 3 :(得分:0)

尝试将其添加到类Meta中,类Person:

ordering = ['country']

http://docs.djangoproject.com/en/dev/ref/models/options/#ordering

答案 4 :(得分:0)

在 view.py 首先:您创建表单

form = YourForm(request.POST)

稍后设置查询:

form.fields['country '].queryset = YourDBTable.objects.all().order_by('Your_Attr')