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

gem*_*asr 5 python forms django

说我有一个模型:

class Option(models.Model):
    name = models.CharField(max_length=60)
Run Code Online (Sandbox Code Playgroud)

我想填充一个ModelChoiceField使用其值作为选择集:

my_model_form_field = forms.ModelChoiceField(queryset = Option.objects.all(), widget = forms.Select())
Run Code Online (Sandbox Code Playgroud)

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

- Yes
- No
- I don't know
- I don't want to answer
Run Code Online (Sandbox Code Playgroud)

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

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

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

Ala*_*air 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())
Run Code Online (Sandbox Code Playgroud)

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

class Option(models.Model):
    name = models.CharField(max_length=60)
    ordering = models.IntegerField()
    class Meta:
        ordering = ['ordering']
Run Code Online (Sandbox Code Playgroud)