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}, чтобы я мог конкатенировать второе условие и воссоздать запрос)

Вернуться на верх