过滤数据模型的推荐方式:使用 .exclude() 还是 .filter()?

1 投票
1 回答
1258 浏览
提问于 2025-04-18 01:22

我很好奇,过滤数据的正确方法或者说高效的方法是什么?我还在学习中。假设你有成千上万条记录,然后你想要找出所有活跃的记录。

应该像这样做吗?

Records.objects.all().exclude(active=False)

还是说这样做?

Records.objects.filter(active=True)

这两种方法有什么区别吗,还是说其实是一样的?

1 个回答

1

这两个表达式生成的查询是不同的。

你可以通过查看查询集的 query 属性来检查它们:

>>> print Records.objects.all().exclude(active=False).query

Records.objects.all().exclude(active=False) 生成的结果是:

SELECT 
    <list_of_fields> 
FROM 
    `<table_name>` 
WHERE 
    NOT (`<table_name>`.`active` = False)

Records.objects.filter(active=True) 生成的结果是:

SELECT 
    <list_of_fields> 
FROM 
    `<table_name>` 
WHERE 
    `<table_name>`.`active` = True

另外,参考一下:

撰写回答