Несколько соединений в Джанго - PullRequest
0 голосов
/ 25 октября 2018

Я пытаюсь преобразовать следующий SQL-запрос в Django ORM, но не могу этого сделать.

SQL-запрос

select distinct(cch.campaign_contact_id), cc.lead_status, cc.contact_id, c.*, ls.date, ls.token from campaign_contact_history as cch left join campaign_contacts as cc on cc.id=cch.campaign_contact_id left join contacts as c on c.id=cc.contact_id left join leadsummary as ls on ls.contact_id=c.id where cc.lead_status in ('8', '9') and cch.created_at between '2018-01-01' and '2018-10-20';

Вот объяснение, что делает вышеуказанный запрос вконтекст SQL:

Он получит все столбцы из Contact модели и один столбец из CampaignContact модели, то есть lead_status, и один столбец из LeadSummary модели, т.е. date.На основе модели CampaignContactHistory фильтр должен применяться для диапазона created_at и distinct campaign_contact.

Вот объяснение того, что делает вышеупомянутый запрос в контексте ORM:
Основываясь на модели CampaignContactHistory, я хочу, чтобы все объекты были Contact, а также CampaignContact, LeadSummary.Он будет применять фильтр к created_at к CampaignContactHistory, используя отдельный () к campaign_contact объекту, который находится в CampaignContactHistory.

Вот определенные модели:

class CampaignContactHistory(DateAwareModel):  # campaign_contact_history
    campaign_contact = models.ForeignKey(CampaignContact, on_delete=models.CASCADE)
    lead_status = models.CharField(max_length=20)

class CampaignContact(DateAwareModel):  # campaign_contacts
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
    lead_status = models.CharField(max_length=20)

class Contact(DateAwareModel):  # contacts
    id = models.AutoField(primary_key=True)
    contact_UID = models.CharField(max_length=20)
    ...

class LeadSummary(DateAwareModel):  # leadsummary
    contact = models.ForeignKey(Contact, on_delete=models.CASCADE)
    date = models.DateField(null=True, blank=True)

Имена таблиц, которые я использовал в SQL-запросах, записываются в виде комментариев перед каждой моделью класса.

Пожалуйста, помогите мне решить эту проблему.Также, если кто-нибудь может предложить мне улучшить мой SQL Query, это было бы намного лучше.Заранее спасибо.

...