ModelChoiceField的Django表单查询集

2024-09-28 18:56:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个表单,我正在使用下面的字段。在

contact_country = forms.ModelChoiceField(queryset=Country.objects.all())

乡村模式是这样的

^{pr2}$

“特殊”字段表示该国家是“特殊”的。如果这个国家是“特别”的,我希望它出现在其他国家之前——我相信你在网上其他地方也看到过(比如说英语的国家,如澳大利亚、英国和美国排在最前面,但也同样是其他国家)。在

QuerySet有可能吗?或者我应该找别的地方吗?在


Tags: 表单objects地方模式contactforms国家all
3条回答

contact_country = forms.ModelChoiceField(queryset=Country.objects.order_by('special'))有效吗?在

您可以重写默认值ordering

class Meta:
    ordering = [ '-special', 'printable_name' ]

你也可以写一个custom manager,但它不值得。。。在

这是未经测试的,所以你可以尝试一下,但它可能无法满足你的需要。。。在

在你看来,这样做:

specials = Country.objects.filter(special=True)
all_of = Country.objects.all()

# worst thing is, this is a list, not a queryset...
new_list = list(specials)+list(all_of)

# add new object to you form...
YourForm.base_fields['contact_country'] = forms.ChoiceField(choices=[(x.id,x) for x in new_list])

你的缺点是,你用一个列表来创建列表,而不是直接从queryset创建

这将解决您的问题,以一种肮脏的方式,但这是一个解决方案,我使用时,modelform不能帮助您。。。在

相关问题 更多 >