2015-05-07 2 views
2

У меня есть список Products, каждый из которых принадлежит к другому Distributor.Django объединить два запроса на ту же модель

Мне нужно отобразить форму для каждого из этих продуктов и их соответствующего дистрибьютора. Я могу сделать это с этим кодом:

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

Спасибо!

+0

Класс QuerySet distributor_name = «FirstDistributor» реализует интерфейс итератора, поэтому он может быть использован как таковой, следовательно, ** itertools.chain ** метод может быть использован для объединения нескольких querysets одной и той же модели вместе –

ответ

3

Вы можете попытаться сделать это, как здесь:

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

Это решение заказывая ваши записи по определенному значению в Django. Вы можете заказать записи по

p= Product.objects.filter(product__id=product_id).extra(
select={'is_top': " distributor__name='FirstDistributor'"}) 
p = p.extra(order_by = ['-is_top'])