Django合并同一模型的两个查询集

3

我有一个产品列表,每个产品属于不同的分销商

我需要为每个产品及其相应的分销商显示一个表单。我可以使用以下代码完成此操作:

form_products = ProductFormSet(
    queryset = Product.objects.filter(product__id=product_id)
)

问题在于我需要先展示属于名为"FirstDistributor"的Distributor的产品表单。

我尝试使用以下代码在查询集之间使用|运算符实现此目的:

form_products = ProductFormSet(
    queryset=(
        Product.objects.filter(
            product__id=product_id, 
            distributor__name='FirstDistributor') | 
        Product.objects.filter(
            product__id=product_id
        ).exclude(distributor__name='FirstDistributor')
    )
)

但是这两个查询集的表单仍然按照相同的顺序显示。我该如何将这两个查询集合并为一个,同时保持相同的顺序?

q1 = Product.objects.filter(product__id=product_id,
    distributor__name='FirstDistributor')

并且

q2 = Product.objects.filter(product__id=product_id
    ).exclude(distributor__name='FirstDistributor')

谢谢!


Queryset类实现了迭代器接口,因此它可以被用作迭代器。因此,itertools.chain方法可以用于将同一模型的多个查询集合并在一起。 - Fanis Despoudis
2个回答

3
您可以尝试像这样做:

https://dev59.com/enI95IYBdhLWcg3wvgl9#2176471

这是Django中按特定值对记录进行排序的解决方案。 您可以按distributor_name = 'FirstDistributor'排序您的记录。
p= Product.objects.filter(product__id=product_id).extra(
select={'is_top': " distributor__name='FirstDistributor'"})
p = p.extra(order_by = ['-is_top'])

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接