Django ModelChoiceField的查询集的自定义顺序

时间:2016-05-03 15:12:46

标签: python django forms

说我有一个模特:

class Option(models.Model):
    name = models.CharField(max_length=60)

我希望使用其值作为选择集填充ModelChoiceField

my_model_form_field = forms.ModelChoiceField(queryset = Option.objects.all(), widget = forms.Select())

如果我这样做,我会获得一个带有以下选项的选择小部件:

- Yes
- No
- I don't know
- I don't want to answer

问题是我希望“我不知道”成为select中的第一个选项(因为它是最常选择的选项)。

使用此自定义顺序获取具有选择集(或获取查询集)的选择窗口小部件是否可行(我的意思是,只是为了放置第一个选项?)?

我可以选择使用Javascript来解决它,但最好使用Django来解决它。

2 个答案:

答案 0 :(得分:6)

您可以向模型添加排序字段,然后按顺序排序查询集。

class Option(models.Model):
    name = models.CharField(max_length=60)
    ordering = models.IntegerField()

my_model_form_field = forms.ModelChoiceField(
    queryset=Option.objects.all().order_by('ordering'),
    widget=forms.Select())

如果您为模型设置ordering选项,则您甚至不需要order_by()

class Option(models.Model):
    name = models.CharField(max_length=60)
    ordering = models.IntegerField()
    class Meta:
        ordering = ['ordering']

答案 1 :(得分:1)

在选项模型中添加另一个字段,整数字段。并在您的查询中。按新字段订购查询。您可以使用管理面板更改这些选项的顺序。