Ale*_*dre 5 django django-queryset
我正在运行有关用户数据的指标,并希望排除那些包含"@ example.com"或"@ test.com"等虚假电子邮件的用户.
我试过了
emails_to_exclude = ['@example.com', '@test.com', '@mailinator.com' ....]
Users.objects.exclude(email__endswith__in=emails_to_exclude)
Run Code Online (Sandbox Code Playgroud)
不幸的是,这不起作用.看起来endswith和in彼此不好玩.有任何想法吗?
Ahs*_*san 14
简单地循环遍历QuerySet,因为QuerySets是惰性的.
emails_to_exclude = ['@example.com', '@test.com', '@mailinator.com' ....]
users = Users.objects
for exclude_email in emails_to_exclude:
users = users.exclude(email__endswith=exclude_email)
users = users.all()
Run Code Online (Sandbox Code Playgroud)
您还可以在单个查询中使用正则表达式来执行此操作。
emails_to_exclude = ['@example.com', '@test.com', '@mailinator.com' ....]
User.objects.exclude(email__regex = "|".join(emails_to_exclude))
Run Code Online (Sandbox Code Playgroud)
我不知道这个查询的效率。
这不适用于SQLite,因为它没有内置的正则表达式支持。