首页 > django orm 出现子查询,如何规避?

django orm 出现子查询,如何规避?

class SubTable(BaseModel):
    guid = models.ForeignKey('MasterTable',related_name='sub_table')
    ...
class MasterTable(BaseModel):
    ...    
    
MasterTable.objects.filter(sub_table__total__isnull=False).exclude(
sub_table__total=0).values_list('platform', 'sub_platform')    

这条查询语句:
MasterTable.objects.filter(sub_table__total__isnull=False).exclude(
sub_table__total=0).values_list('platform', 'sub_platform')
出现了子查询:

SELECT `×××`.`platform`, `×××`.`sub_platform` 
FROM `×××` 
INNER JOIN `×××` 
ON ( `×××`.`id` = `×××`.`guid` ) 
WHERE (`×××`.`total` IS NOT NULL 
    AND NOT (`×××`.`id` IN (SELECT U1.`guid` AS Col1 FROM `×××` U1 WHERE U1.`total` = 0)))

经过测试发现问题出现在exclude(sub_table__total=0)

从sql的角度我想要的是:

SELECT ×××.platform, ×××.sub_platform
FROM ×××
INNER JOIN ×××
ON ( ×××.id = ×××.guid )
WHERE ×××.total IS NOT NULL
AND ×××.total <> 0

请问如何规避。


django支持写sql,你不想用orm就用直接写raw sql呗

https://docs.djangoproject.co...

【热门文章】
【热门文章】