首页 > 解决方案 > Django 通过 is_active 和 has_usable_password() 方法过滤用户

问题描述

我有一个用户管理器,它有一种无需密码即可创建用户的方法。现在,我需要获取所有未激活的用户,即user.is_active=Falseuser.has_usable_password()=False.

has_usable_password()的 Django 文档链接。

我不想做类似下面的事情。

User.objects.filter(is_active=False, password__has_usable_password=False)

标签: djangodjango-models

解决方案


has_usable_password未存储在数据库中,因此您不能直接在查询集中使用它,而是可以检查密码是否以开头!或为空:

from django.db.models import Q
User.objects.filter(Q(is_active=False), Q(password__startswith='!') | Q(password__isnull=True))

这正是has_usable_password做什么(来源)。


推荐阅读