Я пытаюсь преобразовать следующий 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
, это было бы намного лучше.Заранее спасибо.