所以我有一个带有选择字段的ModelForm。在这个选择字段中有大约100个条目。在这些条目中,我有很多条目,比如“Organization Colorado-Denver”,我想把它们放在列表的顶部,这样所有带有“Organization Colorado”的条目都位于列表的顶部,而其他条目则按字典顺序排序。在
我尝试过创建两个独立的查询集(这似乎是一个坏主意,但是只需要100个左右的条目就可以管理了)。似乎有很多方法可以组合这两个查询集,但没有保持顺序(这是重点)。我试过了:
class CreateContactForm(ModelForm):
...
def __init__(self, *args, **kwargs):
super(CreateContactForm, self).__init__(*args, **kwargs)
p = models.ConstantContactList.objects.filter(
name__startswith=settings.PREF_ORGANIZATION_PREFIX
)
np = models.ConstantContactList.objects.filter(
name__regex=r'^(?!{})'.format(settings.PREF_ORGANIZATION_PREFIX)
).order_by('-name')
self.fields['cc_lists'].queryset = list(p) + list(np)
如果有某种方法可以将列表转换回查询集,或者是否有绕过查询集的方法,这可能行不通?我不确定。谁能告诉我该怎么做吗?在
好吧。我已经想出了一个在这里有效的解决方案,我将把它提供给任何其他有同样需求的人。在
然后你可以把它插入这样的模型表单。。。在
^{pr2}$我建议不要尝试排序查询集,而只处理呈现层(模板或表单)中的排序。这样,如果您想本地化代码,就不必更改查询。在
假设您使用
forms.Select
小部件。您可能希望从这个小部件继承并重写render_menu
逻辑,以便自己构造它并自己处理排序。您可以访问已渲染或未渲染的选项,因此从那时起就不应该是问题了。在相关问题 更多 >
编程相关推荐