0

В запросе я хочу вернуть коллекцию (через pk) и все объекты Sales, имеющие статус = 'ACTIVE'.Фильтровать дочерние строки в Django Queryset

Я попытался:

Collection.objects.filter(Sales__status="ACTIVE") 

Но я вернусь объект коллекции со всеми объектами продаж, если один из объектов продаж соответствует критериям, а не только те, которые имеют статус «ACTIVE»

поэтому у меня есть 2 модели (и эталонная модель)

class Collection(models.Model): 
    ID = models.AutoField(primary_key=True) 
    collection_title = models.CharField(max_length=255) 

class Sales(models.Model): 
    ID = models.AutoField(primary_key=True) 
    sales_title = models.CharField(max_length=255) 

class CollectionSales(models.Model): 
    COLLECTIONSALES_STATUS_LIST = (
     ('ACTIVE', 'Active'), 
     ('REJECT', 'Reject'), 
    ) 
    collection = models.ForeignKey('Collection') 
    sales = models.ForeignKey('Sales') 
    status = models.CharField(max_length=10, choices=COLLECTIONSALES_STATUS_LIST, default="ACTIVE") 
    class Meta: 
     db_table = "myschema_collection_sales" 
     managed=False 

EDIT: Я пытаюсь соответствовать это в Rest рамочной программы так, что о utput будет:

{ 
"count": 2, 
"next": null, 
"previous": null, 
"results": [ 
    { 
     "ID": "1", 
     "collection_title": "My Collection 1", 
     "Sales": [ 
       { 
       "ID": 12, 
       "sales_title": "my sales title 12", 
       "status": "ACTIVE" 
       } 
     ] 
    } 
    , 
    { 
     "ID": "2", 
     "collection_title": "My Collection 2", 
     "Sales": [ 
       { 
       "ID": 4, 
       "sales_title": "my sales title 4", 
       "status": "ACTIVE" 
       }, 
       { 
       "ID": 5, 
       "sales_title": "my sales title 5", 
       "status": "ACTIVE" 
       } 
     ] 
    } 
] 
} 
+0

Я думаю, что ваш запрос был Collection.objects.filter (sales__status = "ACTIVE")? Он, естественно, возвращает все коллекции с активными продажами. – RickyA

+0

Что именно вы хотите? Коллекции с активной продажей? CollectionSales для активной продажи? – RickyA

+0

Я хочу, чтобы запрос возвращал объект коллекции вместе со всеми продажами, которые являются «ACTIVE» – HungryArthur

ответ

0

Вы должны сами построить структуру данных. То, что вы хотите, - это очень важные два запроса, и вы не можете получить их за один звонок.

data = {"collection":None, "sales":[]} 
for coll in Collection.objects.filter(sales__status="ACTIVE"): 
    data["collection"] = coll 
    for collsales in coll.collectionsales_set.filter(status="ACTIVE") 
     data["sales"].append(collsales.collection) 
+0

OK, Спасибо за ваш ответ RickyA. Я посмотрю и обновлю соответствующим образом. – HungryArthur

+0

Проблема в том, что я пытаюсь использовать это с rest-framework. Я нашел этот вопрос, но не знаю, как его адаптировать к моей ситуации (если он может быть адаптирован): [link] (http://stackoverflow.com/questions/13471083/how-to-extend-model-on -serializer-level-with-django-rest-framework) – HungryArthur

+0

да, это боль. У меня была аналогичная проблема с tastypie. Хитрость заключалась в том, чтобы не использовать обработчиков, которые привязаны к модели, но для использования более общих обработчиков, которые позволяли вам писать собственный код. Может быть, [это] (http://django-rest-framework.org/api-guide/views.html) работает для вас? – RickyA

Смежные вопросы