Django -- concatenate filter на отношении many_to_many создает неожиданное соединение
class ProductionOrderProductionOrderStatus(sf_models.BaseModel):
production_order = models.ForeignKey(ProductionOrder, on_delete=models.CASCADE)
production_order_status = models.ForeignKey(ProductionOrderStatus, on_delete=models.CASCADE)
class ProductionOrderStatus(sf_models.BaseModel):
status = models.IntegerField(null=False)
begin_datetime = models.DateTimeField(default=timezone.now)
end_datetime = models.DateTimeField(null=True, blank=True)
class ProductionOrder(sf_models.BaseModel):
statuses = models.ManyToManyField(ProductionOrderStatus, through='ProductionOrderProductionOrderStatus', related_name='production_orders')
если я конкатенирую 2 фильтра следующим образом ->
ProductionOrder.objects.filter(statuses__status=2).filter(statuses__end_datetime=None)
я получаю следующее sql:
'SELECT ... FROM "production_order_productionorder"
INNER JOIN "production_order_productionorderproductionorderstatus" ON ("production_order_productionorder"."id" = "production_order_productionorderproductionorderstatus"."production_order_id")
INNER JOIN "production_order_productionorderstatus" ON ("production_order_productionorderproductionorderstatus"."production_order_status_id" = "production_order_productionorderstatus"."id")
LEFT OUTER JOIN "production_order_productionorderproductionorderstatus" T4 ON ("production_order_productionorder"."id" = T4."production_order_id")
LEFT OUTER JOIN "production_order_productionorderstatus" T5 ON (T4."production_order_status_id" = T5."id")
WHERE ("production_order_productionorderstatus"."status" = 2 AND T5."end_datetime" IS NULL)'
если я поставлю такой же фильтр ->
ProductionOrder.objects.filter(statuses__status=2, statuses__end_datetime=None)
я получаю следующее sql:
'SELECT ... FROM "production_order_productionorder"
INNER JOIN "production_order_productionorderproductionorderstatus" ON ("production_order_productionorder"."id" = "production_order_productionorderproductionorderstatus"."production_order_id")
INNER JOIN "production_order_productionorderstatus" ON ("production_order_productionorderproductionorderstatus"."production_order_status_id" = "production_order_productionorderstatus"."id")
WHERE ("production_order_productionorderstatus"."end_datetime" IS NULL AND "production_order_productionorderstatus"."status" = 2)'
если у меня есть набор запросов, созданный с этим условием: ProductionOrder.objects.filter(statuses__status=2)
как я могу конкатенировать второе условие?
Есть ли решение для получения диктанта уже отфильтрованного условия? (чтобы получить, например, {'statuses__status':2}, чтобы я мог конкатенировать второе условие и воссоздать запрос)