如何筛选Django查询集

如何筛选Django查询集,django,filter,django-queryset,Django,Filter,Django Queryset,在初始查询之后,如何在查询集中进行筛选?本质上,我试图从queryset中删除一个项(而不是从数据库中删除它) 您可以将管理器的方法应用于QuerySet对象 第一: 在以下情况下不需要结尾处的.all(): accounts = company_account.objects.filter(company=userinfo.company).all() # this is the same that accounts = company_account.objects.filter(compa

在初始查询之后,如何在查询集中进行筛选?本质上,我试图从queryset中删除一个项(而不是从数据库中删除它)


您可以将管理器的方法应用于QuerySet对象

第一:

在以下情况下不需要结尾处的
.all()

accounts = company_account.objects.filter(company=userinfo.company).all()
# this is the same that
accounts = company_account.objects.filter(company=userinfo.company)
第二:

如果要从查询集中排除对象,可以使用:

accounts = accounts.exclude(**criteria**)
第三:

对于您的情况,您可以尝试使用(Django 1.8+):


您不应该以这种方式使用queryset API。在您的情况下,只需使用
Q
对象过滤您的
公司账户

accounts = company_account.objects.filter(
     Q(first_name_lower__icontain=search) |
     Q(last_name_lower__icontain=search),
     company=userinfo.company,
).distinct()

或者更好,使用全文搜索方法。或者使用原始SQL查询。

排除的问题是,我需要基于两个值进行排除:first_name_lower和last_name lower,因此我需要删除典型排除之外的queryset项。
from django.db.models import Value, CharField
from django.db.models.functions import Concat

accounts.annotate(full_name=Concat('first_name_lower', Value(' '), 'last_name_lower'),
                  output_field=CharField()).exclude(full_name=something_here)
accounts = company_account.objects.filter(
     Q(first_name_lower__icontain=search) |
     Q(last_name_lower__icontain=search),
     company=userinfo.company,
).distinct()