Skip to main content
 首页 » 编程设计

python之Django 过滤器 iexact 在列表上

2024年10月24日34java哥

我有一个这样设置的用户模型。

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 的查找“iexact”或不允许在该字段上加入。

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

我应该如何进行此查询?

请您参考如下方法:

Django ORM 不直接支持它。我认为数据库后端也不会。您可以通过组合多个 __iexact 过滤器来获得您正在寻找的结果,如此处的各种答案所示:How to dynamically compose an OR query filter in Django?

在此处显示的选项中,我更喜欢 reduce(operator.or_, ...) 语法而不是 for 循环,但这是个人偏好。