python - Django 按顺序连接两个查询集

标签 python database django-queryset

所以我有一个带有选择字段的 ModelForm。在此选择字段中,大约有 100 个条目。在这些条目中,我有许多条目,例如“Organization Colorado - Denver”,我想将其放在列表的顶部,这样所有带有“Organization Colorado”的条目都在列表的顶部,并且所有内容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)

这行不通,尽管它可能会起作用,如果有某种方法可以将该列表转换回查询集,或者是否可以绕过查询集?我不知道。任何人都可以提供关于我应该做什么的线索吗?

最佳答案

我建议不要尝试对查询集进行排序,而只在呈现层(模板或表单)中处理排序。这样,如果您想本地化代码,就不必更改查询。

假设您使用 forms.Select 小部件。您可能希望继承此小部件并覆盖 render_menu 逻辑,以便自己构建它并自己处理排序。您将有权访问已呈现或未呈现的选项,因此从那时起这应该不是问题。

关于python - Django 按顺序连接两个查询集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46408668/

相关文章:

python - 为什么我用这个 python 循环泄漏内存?

ruby-on-rails - 用于数据库表的 Rails 3 I18n

database - 数据库中的可恢复性和级联调度

python - 筛选具有日期时间范围的对象 (00 :00 to 23:59:99) in Django

python - 我的 tkinter 按钮命令功能有问题

python - Django 模型 OneToOneField : "This field is required" error in admin

sql - 如何在数据库中实现完全不相交特化?

Django - 在 ArrayField 中查询最新日期

python - django select_for_update 和 select_related 在同一个查询上?

python - Pandas :聚合给定列的行并计算数量