Преобразование 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'
                ";
Вернуться на верх