我使用了django用户模型,并对其进行了扩展,添加了一个phone字段。我可以使用用户名或电子邮件登录,但无法从扩展用户模型访问电话号码字段。你知道吗
你知道吗型号.py你知道吗
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
phonenumber = models.CharField(max_length=10)
你知道吗后端.py你知道吗
class AuthenticationBackend(backends.ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
usermodel = get_user_model()
print(usermodel)
try:
user = usermodel.objects.get(Q(username__iexact=username) | Q(
email__iexact=username))
if user.check_password(password):
return user
except user.DoesNotExist:
pass
你知道吗后端.py是我用来实现通过用户名或电子邮件登录,但我不能在扩展用户模型的电话号码。你知道吗
您可以扩展AbstractUser并在其上添加电话号码。你知道吗
然后您应该在中指定自定义模型作为默认用户模型设置.py
AUTH_USER_MODEL = 'app_name.User'
Customizing authentication in Django
有两种方法可以解决你的问题。你知道吗
对于第一个,我建议您查看Django documentation on creating custom users. 还有一个关于如何做到这一点的非常广泛的教程here。你知道吗
如果你想走简单的路线,你只需要在配置文件的phonenumber字段上设置一个反向访问器。你知道吗
然后,您可以按用户配置文件的电话号码搜索用户:
虽然这不在您的问题范围内,但我认为您应该注意代码中的以下问题:
phonenumber = models.CharField(max_length=10, related_name='profile', unique=True)
usermodel.objects.get(...)
查询将返回多个用户。您应该限制用户名不包含电话号码,这只能通过扩展默认用户类来实现。你知道吗相关问题 更多 >
编程相关推荐