Django为同一模型

时间:2015-05-07 13:40:56

标签: python django django-queryset

我有Products的列表,每个列表都属于不同的Distributor

我需要为每个产品及其相应的经销商显示一份表格。我可以用这段代码完成:

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

问题是我需要显示包含属于特定Distributor名为" FirstDistributor"的产品的表单。页面中第一个

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

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')

谢谢!

2 个答案:

答案 0 :(得分:3)

你可以尝试这样做:

https://stackoverflow.com/a/2176471/4971083

它是在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 :(得分:1)

您可以使用itertools将两者结合起来:

from itertools import chain
result_list = list(chain(page_list, article_list, post_list))

来源: https://stackoverflow.com/a/434755/3279262