【发布时间】:2020-09-25 02:33:59
【问题描述】:
为什么 django 会为以下两个排除语句返回不同的结果?
Django 排除语句 1:
self.fields.exclude(record_type__isnull=True, field=None).prefetch_related('field', 'field__table')
各自的 Django SQL 查询:
SELECT field1, field2, field__table FROM `table` WHERE (`table`.`t_ct_id` = 2 AND `table`.`t_id` = 32 AND NOT (`table`.`record_type` IS NULL AND `table`.`field_id` IS NULL))
记录数:395
Django 排除语句 2:
self.fields.exclude(record_type__isnull=True).exclude(field=None).prefetch_related('field', 'field__table')
各自的 Django SQL 查询 2:
SELECT field1, field2, field__table FROM `table` WHERE (`table`.`t_ct_id` = 2 AND `table`.`t_id` = 32 AND NOT (`table`.`incoming_record_type` IS NULL) AND NOT (`table`.`field_id` IS NULL))
记录数:152
我正在使用 django 版本 2.2.11 和 MYSQL 作为数据库
【问题讨论】:
-
这是有道理的,因为对于两个排除标准,这意味着您排除了第一个和第二个元素。如果它在一个条件下,如果它与两个 combined 匹配,则排除记录。
标签: mysql django django-models django-rest-framework