说我有一个模特:
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
来解决它。
答案 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)
在选项模型中添加另一个字段,整数字段。并在您的查询中。按新字段订购查询。您可以使用管理面板更改这些选项的顺序。