【发布时间】:2020-01-03 23:53:34
【问题描述】:
如果我问错了问题,让我首先说明最终目标:我需要允许用户通过不在主要模型 (Salesleadquote) 中的字段过滤 ListView,而是该字段来自模型(Salesleadbusinessgroup) 与相关模型 (Saleslead) 的 FK。 我试图解决这个问题的方法是在 Salesleadquote 上注释一个字段。
模型:
class Salesleadquote(models.Model):
salesleadquoteid = models.AutoField(db_column='SalesLeadQuoteId', primary_key=True)
salesleadid = models.ForeignKey(Saleslead, models.DO_NOTHING, db_column='SalesLeadId')
...
class Saleslead(models.Model):
salesleadid = models.AutoField(db_column='SalesLeadId', primary_key=True)
...
class Salesleadbusinessgroup(models.Model):
salesleadbusinessgroupid = models.AutoField(db_column='SalesLeadBusinessGroupId', primary_key=True)
salesleadid = models.ForeignKey(Saleslead, models.DO_NOTHING, db_column='SalesLeadId')
businessgroupid = models.ForeignKey(Businessgroup, models.DO_NOTHING, db_column='BusinessGroupId')
所需的结果(查询集),在 SQL 中:
SELECT slq.*, slbg.BusinessGroupId FROM crm.SalesLeadQuote slq
LEFT JOIN
(SELECT SalesLeadId, BusinessGroupId
FROM crm.SalesLeadBusinessGroup ) slbg
ON slbg.SalesLeadId = slq.SalesLeadId
WHERE slbg.BusinessGroupId IN (5,21)
我知道我可以通过执行类似的操作来获得 RawQuerySet
Salesleadquote.objects.raw("SELECT salesleadquote.*, \
salesleadbusinessgroup.businessgroupid \
FROM salesleadquote \
LEFT JOIN salesleadbusinessgroup \
ON salesleadquote.salesleadid = salesleadbusinessgroup.salesleadid \
WHERE salesleadbusinessgroup.businessgroupid IN (5,21)")
但我需要 QuerySet 的功能,所以我的想法是在 Salesleadquote 中注释所需的字段(businessgroupid),但我一直在努力解决如何实现这一点。
【问题讨论】:
标签: django