Как сделать LEFT JOIN в django, я не могу понять это

Моя первая модель:

class HdAlerts(models.Model):

    raised_at = models.DateTimeField(null=False)
    msg = models.TextField()
    site = models.ForeignKey(
        Sites,
        on_delete=models.CASCADE,
    )
    alert_class = models.CharField(max_length=120)
    priority = models.IntegerField(null=True)
    severity = models.SmallIntegerField(null=True)
    partner = models.ForeignKey(
        Partners,
        on_delete=models.CASCADE,
    )
    alert_id = models.TextField(primary_key=True)
    updated_at = models.DateTimeField(null=True)
    resolved_at = models.DateTimeField(null=True)
    ignore_until = models.DateTimeField(null=True)

    class Meta:
        managed = False
        db_table = 'hd_alerts'

    def __str__(self):
        return f'<ID: {self.alert_id}: [Msg: {self.msg[:10]}]>'

Секунда:

class Partners(models.Model):

    partner_id = models.IntegerField(primary_key=True)
    partner_name = models.CharField(max_length=500, null=False)
    is_profiles_shared = models.BooleanField(null=False)
    is_deleted = models.BooleanField(null=True)

    class Meta:
        managed = False
        db_table = 'partners'

    def __str__(self):
        return f'<Partner_ID: {self.partner_id}: [Name: {self.partner_name}]>'

И последнее:

class Sites(models.Model):
    site_id = models.IntegerField(primary_key=True)
    site_name = models.CharField(max_length=500, blank=True)
    is_deleted = models.BooleanField()
    is_auto = models.BooleanField()
    partner_id = models.IntegerField(blank=True, null=True)
    source_id = models.IntegerField(blank=True, null=True)
    category_id = models.SmallIntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'sites'
        verbose_name = 'Site'
        verbose_name_plural = 'Sites'

    def __str__(self):
        return f'Site id: {self.site_id}, Site name: {self.site_name}'

Мне нужно сделать следующий запрос:

SELECT
   p.partner_name DBA,
   s.site_name Site,
   ha.msg Messege,
   ha.ignore_until Ignored
FROM
   hd_alerts ha
LEFT JOIN partners p ON
   ha.partner_id = p.partner_id
LEFT JOIN sites s ON
   s.site_id = ha.site_id
WHERE ha.resolved_at IS NULL

Я не понимаю, как это можно сделать в django. Я пытался передать его в raw(), но он запрашивает primary_key (который я указал, но видимо что-то пошло не так). Может кто-нибудь подсказать правильное решение, пожалуйста?

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