В настоящее время я работаю над проектом, в котором у меня есть нижеописанные таблицы, используя таблицу ниже. Я хочу сделать запрос, который покажет оставшуюся позицию на складе, поэтому я хочу сделать, используя Union All
в Django ORM, используя union all
в запросе я буду управлять своей позицией на складе, я выполнил запрос SQL
, который я также описал ниже, для получения ожидаемого результата.
class PurchaseHeader(models.Model):
purchase_no = models.CharField(max_length=100, unique=True)
date = models.DateField(default=datetime.date.today)
footer_description = models.TextField()
payment_method = models.CharField(max_length=100)
cartage_amount = models.DecimalField(max_digits=8, decimal_places=2)
additional_tax = models.DecimalField(max_digits=8, decimal_places=2)
withholding_tax = models.DecimalField(max_digits=8, decimal_places=2)
account_id = models.ForeignKey(ChartOfAccount, models.SET_NULL, blank=True, null=True)
class PurchaseDetail(models.Model):
item_code = models.CharField(max_length=100)
item_name = models.CharField(max_length=100)
item_description = models.TextField()
unit = models.CharField(max_length=100)
quantity = models.IntegerField()
cost_price = models.DecimalField(max_digits=8, decimal_places=2)
retail_price = models.DecimalField(max_digits=8, decimal_places=2)
sales_tax = models.DecimalField(max_digits=8, decimal_places=2)
purchase_id = models.ForeignKey(PurchaseHeader, on_delete=models.CASCADE)
class PurchaseReturnHeader(models.Model):
purchase_no = models.CharField(max_length=100, unique=True)
date = models.DateField(default=datetime.date.today)
footer_description = models.TextField()
payment_method = models.CharField(max_length=100)
cartage_amount = models.DecimalField(max_digits=8, decimal_places=2)
additional_tax = models.DecimalField(max_digits=8, decimal_places=2)
withholding_tax = models.DecimalField(max_digits=8, decimal_places=2)
account_id = models.ForeignKey(ChartOfAccount, models.SET_NULL, blank=True, null=True)
class PurchaseReturnDetail(models.Model):
item_code = models.CharField(max_length=100)
item_name = models.CharField(max_length=100)
item_description = models.TextField()
unit = models.CharField(max_length=100)
quantity = models.IntegerField()
cost_price = models.DecimalField(max_digits=8, decimal_places=2)
retail_price = models.DecimalField(max_digits=8, decimal_places=2)
sales_tax = models.DecimalField(max_digits=8, decimal_places=2)
purchase_return_id = models.ForeignKey(PurchaseReturnHeader, on_delete=models.CASCADE)
class SaleHeader(models.Model):
sale_no = models.CharField(max_length=100, unique=True)
date = models.DateField(default=datetime.date.today)
footer_description = models.TextField()
payment_method = models.CharField(max_length=100)
cartage_amount = models.DecimalField(max_digits=8, decimal_places=2)
additional_tax = models.DecimalField(max_digits=8, decimal_places=2)
withholding_tax = models.DecimalField(max_digits=8, decimal_places=2)
account_id = models.ForeignKey(ChartOfAccount, models.SET_NULL, blank=True, null=True)
class SaleDetail(models.Model):
item_code = models.CharField(max_length=100)
item_name = models.CharField(max_length=100)
item_description = models.TextField()
unit = models.CharField(max_length=100)
quantity = models.IntegerField()
cost_price = models.DecimalField(max_digits=8, decimal_places=2)
retail_price = models.DecimalField(max_digits=8, decimal_places=2)
sales_tax = models.DecimalField(max_digits=8, decimal_places=2)
sale_id = models.ForeignKey(SaleHeader, on_delete=models.CASCADE)
class SaleReturnHeader(models.Model):
sale_no = models.CharField(max_length=100, unique=True)
date = models.DateField(default=datetime.date.today)
footer_description = models.TextField()
payment_method = models.CharField(max_length=100)
cartage_amount = models.DecimalField(max_digits=8, decimal_places=2)
additional_tax = models.DecimalField(max_digits=8, decimal_places=2)
withholding_tax = models.DecimalField(max_digits=8, decimal_places=2)
account_id = models.ForeignKey(ChartOfAccount, models.SET_NULL, blank=True, null=True,)
class SaleRetutnDetail(models.Model):
item_code = models.CharField(max_length=100)
item_name = models.CharField(max_length=100)
item_description = models.TextField()
unit = models.CharField(max_length=100)
quantity = models.IntegerField()
cost_price = models.DecimalField(max_digits=8, decimal_places=2)
retail_price = models.DecimalField(max_digits=8, decimal_places=2)
sales_tax = models.DecimalField(max_digits=8, decimal_places=2)
sale_return_id = models.ForeignKey(SaleReturnHeader, on_delete=models.CASCADE)
И я хочу сделать запрос, подобный этому
SELECT item_code, SUM(quantity) AS qty FROM (
SELECT 'Purchase' AS TranType,Item_Code,Quantity FROM transaction_purchasedetail
UNION All
SELECT 'Purchase Return' AS TranType,Item_Code,Quantity * -1 FROM transaction_purchasereturndetail
UNION All
SELECT 'Sale' AS TranType,Item_Code,Quantity * -1 FROM transaction_saledetail
UNION All
SELECT 'Sale Return' AS TranType,Item_Code,Quantity FROM transaction_saleretutndetail
) AS tblTemp GROUP BY Item_Code
Я выполнил вышеуказанный SQL-запрос в браузере БД SQLite и получил ожидаемый результат
Как я могу сделать это в Django ORM.