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

请问如何规避。

阅读 4.6k
1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题