Цепной фильтр и исключение в модели Django с поисками полей, которые охватывают отношения

У меня есть следующие модели:Мне нужен список типов заказов, у которых есть заказы, которые соответствуют этим критериям: ( ---- +: = 1 =: + ----
4 голоса | спросил rsp 18 J000000Sunday10 2010, 02:24:40

1 ответ


0
То, что происходит, - то, что запрос exclude () запутывает вас.По сути, это исключает любой Order_type, который имеет хотя бы один Order без статуса, что почти наверняка не то, что вы хотите, чтобы произошло.Самое простое решение в вашем случае - использовать ---- +: = 0 =: + ---- в аргументах filter ().Однако вам также нужно добавить ---- +: = 1 =: + ---- в конец вашего запроса, потому что в противном случае вы получите QuerySet с несколькими экземплярами одного и того же типа Order_type, если он имеет болееодин заказ, который соответствует запросу.Это должно работать:В дополнение к этому, в запросе qs, который вы дали в конце вопроса, вам не нужно говорить ---- +: = 3 =: + ---- , вы можете просто использовать ---- +: = 4 =: + ---- (вам все еще нужны ---- +: = 5 =: + ---- ).Так что это также будет работать:Приложение (изменить):Вот фактический SQL, который Django выдает для вышеуказанных наборов запросов:EXPLAIN показывает, что второй запрос немного дороже (стоимость 28,99 против 28,64 с очень маленьким набором данных).
ответил Aram Dulyan 18 J000000Sunday10 2010, 05:19:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132