Преобразование mysql-запроса в django orm с использованием одной и той же таблицы

Я пытаюсь преобразовать sql-код в код django orm. Я не хочу использовать необработанные функции python

SELECT 
                u.`user_id` as 'dp_id',
                cp.`email` as 'dp_email',
                cp.`name` as 'dp_name',
                u2.`user_id` as 'cm_id',
                cp2.`email` as 'cm_email',
                cp2.`name` as 'cm_name'
            FROM `user` u 
            INNER JOIN customer_profile cp
                ON u.`customer_profile_id` = cp.`id`
            INNER JOIN branch_user bm
                ON bm.`child_user_id` = u.`user_id`
                AND bm.`parent_role_id` = 14
                AND bm.`is_deleted` = 0
            INNER JOIN user u2
                ON u2.`user_id` = bm.`parent_user_id`
                AND u2.`is_deleted` = 0
            INNER JOIN customer_profile cp2
                ON u2.`customer_profile_id` = cp2.`id`
            WHERE u.`user_id` = ?
                AND u.`is_deleted` = 0

Я сделал что-то вроде этого :

cp_emails = User.objects.filter(branch_user_childUser__parent_role_id=14, branch_user_childUser__is_deleted=0).select_related('customer_profile').prefetch_related('branch_user_childUser')

Но я не могу добавить пользователя u2 в django orm, так как это та же таблица пользователей и это тоже сравнение с "bm", то есть эта строка "ON u2.user_id = bm.parent_user_id"

Мои модели:

class User(models.Model):
user_id = models.AutoField(primary_key=True)
customer_profile = models.ForeignKey(
    'login.CustomerProfile', on_delete=models.CASCADE, default=None
)

class BackboneUserManagerMapping(models.Model):
    child_user = models.ForeignKey('login.User', related_name='branch_user_childUser', on_delete=models.DO_NOTHING)
    parent_user = models.ForeignKey('login.User', related_name='branch_user_childUser', on_delete=models.DO_NOTHING)
    parent_role_id = models.IntegerField()
    is_deleted = models.BooleanField(default=False)

 class CustomerProfile(AbstractBaseUser, PermissionsMixin):
    id = models.AutoField(primary_key=True)
    email = models.EmailField(default=None, unique=True)
    mobile = models.CharField(max_length=13, default=None)
    alt_mobile = models.CharField(max_length=13, null=True)
    name = models.CharField(max_length=255, default=None)
Вернуться на верх