我正在尝试为Django应用程序执行不区分大小写的登录,而不会更改原始用户名案例。根据我的研究,最好的方法是创建一个相关字段,以便在注册时以小写形式存储用户名。没有重塑用户模型,这是一个简单的解决方案,对吧?我的困境:如何从一个模型中获取数据,更改它,并在创建对象时将其保存在另一个模型中?
以下是 models.py :
中的内容from django.db import models
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User)
lc_n = User.username
lc_n = lc_n.lower()
lowercase_name = models.CharField(max_length=30, default=lc_n)
运行python manage.py makemigrations
时出现以下错误:
AttributeError: type object 'User' has no attribute 'username'
用户确实拥有该属性,但无法以这种方式访问。
请原谅我,因为这必须包含一些简单的基本缺陷。我们将非常感谢您提供的任何支持。
答案 0 :(得分:9)
您不需要任何其他模型来实现不区分大小写的登录。 Django支持iexact
运算符的不区分大小写的过滤:
user = User.objects.get(username__iexact=name)