Django过滤iexact列表

时间:2015-11-30 19:22:53

标签: 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列表。

这是我想要执行的查询:

MyUserModel.objects.filter(external_user__email__iexact__in=user_emails)

但是我收到了这个错误: Unsupported lookup 'iexact' for EmailField or join on the field not permitted.

我需要iexact,因为电子邮件列表是基于用户输入的,可能与存储在数据库中的大小写不匹配。

我应该如何进行此查询?

2 个答案:

答案 0 :(得分:2)

Django ORM不直接支持。我不认为数据库后端也会这样做。您可以通过组合多个reduce(operator.or_, ...)过滤器来获得您要查找的结果,如各种答案所示:How to dynamically compose an OR query filter in Django?

在那里显示的选项中,我更喜欢shell=True语法for for循环,但这是个人偏好。

答案 1 :(得分:-1)

电子邮件必须完整,因此,它应该是准确的,您不需要使用handler.removeCallbacks(setTextRunnable); 查找。你只需要:

__iexact