Python Django筛选器在列表上显示
我有一个这样设置的用户模型Python Django筛选器在列表上显示,python,django,django-queryset,Python,Django,Django Queryset,我有一个这样设置的用户模型 class ExternalUserModel(models.Model): email = models.EmailField() # other fields class MyUserModel(models.Model): external_user = models.ForeignKey(ExternalUserModel) # other fields 我正试图从电子邮件列表中获取MyUserModel的列表 这是我要执行
class ExternalUserModel(models.Model):
email = models.EmailField()
# other fields
class MyUserModel(models.Model):
external_user = models.ForeignKey(ExternalUserModel)
# other fields
我正试图从电子邮件列表中获取MyUserModel的列表
这是我要执行的查询:
MyUserModel.objects.filter(external_user__email__iexact__in=user_emails)
但我得到了一个错误:
不允许对EmailField或该字段上的join进行不支持的查找“iexact”。
我需要iexact,因为电子邮件列表基于用户输入,可能与数据库中存储的大小写不匹配
我应该如何进行此查询?电子邮件必须完整,因此应该准确,您不需要使用
\uuuiExact
查找。你只需要:
MyUserModel.objects.filter(external_user__email__in=user_emails)
Django ORM并不直接支持这一点。我认为数据库后端也不行。您可以通过组合多个
\uuuu iexact
过滤器来获得所需的结果,如以下各种答案所示:
在这里显示的选项中,我更喜欢
reduce(operator.or,…)
语法而不是for循环,但这是我个人的偏好。谢谢query=reduce(operator.or(用户电子邮件中x的外部用户电子邮件iexact=x))
MyUserModel.objects.filter(query)
成功了!这考虑到了案例,即email@example.com
与Email@example.com