【发布时间】:2018-03-06 15:03:35
【问题描述】:
所以我有一个带有选择字段的 ModelForm。在此选择字段中,大约有 100 个条目。在这些条目中,我有许多条目,例如“科罗拉多组织 - 丹佛”,我希望将它们放在列表顶部,这样所有带有“科罗拉多组织”的条目都位于列表顶部,并且所有内容else 按字典顺序排序。
我尝试过创建两个单独的查询集(这似乎是个坏主意,但只需 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)
这不起作用,尽管它可能,如果有某种方法可以将该列表转换回查询集,或者是否有一种方法可以绕过查询集?我不知道。任何人都可以提供关于我应该做什么的线索吗?
【问题讨论】:
-
你试过没有这两个
listcoersions吗?我现在无法访问 Django 进行测试,但它可能只是在 SQL 中创建一个UNION()来组合两个查询集p和np。 -
@C14L
unsupported operand type(s) for +: 'QuerySet' and 'QuerySet'
标签: python database django-queryset