如何筛选Django查询集
在初始查询之后,如何在查询集中进行筛选?本质上,我试图从queryset中删除一个项(而不是从数据库中删除它)如何筛选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对象 第一: 在以下情况下不需要结尾处的
.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()