Преобразование sql-кода в таблицу django orm self и отсутствие использования foreignkey
Это часть sql запроса, который мне нужно преобразовать в django запрос с помощью orm. Теперь дело в том, что мне не нужно использовать сырой sql django way вместо этого только django orm. Как вы все можете видеть в sql-запросе, он дважды соединяет таблицу self. У них нет внешнего ключа на self для столбцов.
Модель
class PurchaseOrders(models.Model):
id = models.AutoField(primary_key=True, unique=True)
po_no = models.CharField(max_length=255)
type = models.CharField(choices=TYPE_CHOICES, max_length=17)
franchise = models.ForeignKey(
'franchise.Franchise', on_delete=models.DO_NOTHING, db_column='franchise_id'
)
status = models.CharField(choices=STATUS_CHOICES, max_length=15)
parent_po_id = models.IntegerField()
ref_po_no = models.CharField(max_length=255, blank=True, null=True)
is_deleted = models.BooleanField(default=False)
class Meta:
db_table = 'purchase_orders'
Необработанный запрос Sql:
SELECT
po.`po_no`,
po.`type`,
f.`gst_no`,
po2.`po_no` as 'parent_po_no',
po2.`type` as 'parent_po_type',
refPo.`type` as 'ref_po_type',
refPo.`po_amount` as 'ref_po_amt'
INNER JOIN `franchise` f
ON f.`franchise_id` = po.`franchise_id`
LEFT JOIN `purchase_orders` po2
ON po2.`id` = po.`parent_po_id`
LEFT JOIN `purchase_orders` refPo
ON refPo.`po_no` = po.`ref_po_no`
WHERE po.`id` = ?
AND po.`is_deleted`=0
AND po.`status` <> 'rejected'
";