如何在初始查询后过滤查询集?基本上我试图从查询集中删除一个项目(不从数据库中删除它)。
accounts = company_account.objects.filter(company=userinfo.company).all()
for account in accounts:
if not search in account.first_name_lower+" "+account.last_name_lower:
account.remove()
答案 0 :(得分:1)
您可以将Manager的方法应用于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**)
第三
对于您的情况,您可以使用Concat(Django 1.8 +)来尝试:
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)
答案 1 :(得分:0)
您不应该以这种方式使用queryset API。在您的情况下,您只需使用Q
对象来过滤company_account
:
accounts = company_account.objects.filter(
Q(first_name_lower__icontain=search) |
Q(last_name_lower__icontain=search),
company=userinfo.company,
).distinct()
或者更好,使用全文搜索方法。或者使用原始SQL查询。