我正在尝试对 Django 应用程序进行不区分大小写的登录,而不更改原始用户名大小写。根据我的研究,最好的方法是创建一个相关字段,在注册时以小写形式存储用户名。无需重新发明用户模型,这是一个简单的解决方案,对吗?我的困境:如何在创建对象时从一个模型中获取数据、更改它并将其保存在另一个模型中?
这是 中的内容模型.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'
用户确实具有该属性,但无法通过这种方式访问它。
请原谅我,因为这肯定包含一些简单的基本缺陷。任何可能提供的支持将不胜感激。
最佳答案
您不需要任何额外的模型来实现不区分大小写的登录。 Django 通过 iexact
支持不区分大小写的过滤运算符(operator):
user = User.objects.get(username__iexact=name)
关于Django不区分大小写的登录,混合大小写的用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27673410/