在某人将此问题标记为此问题的副本Can django's auth_user.username be varchar(75)? How could that be done?或其他此类问题之前,请阅读此问题。我联系到的问题是准确地提出这个问题,但不幸的是,答案没有解决被问到的问题。
我可以通过执行以下操作将auth_user.username字段更改为100个字符:
username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))
如果我这样做,它会破坏Django中的任何东西吗?
当我将Django更新到更高版本时,这会破坏不是问题。我也不是在考虑编写其他身份验证方法。我只是想知道如果我这样做,我是否会破坏任何东西。
答案 0 :(得分:20)
你需要在几个地方修补最大长度:模型字段的描述,表单字段的描述和最大长度验证器。最大长度验证器附加到表单字段和模型字段。
这是一个代码片段,它将修补所有内容:
https://gist.github.com/1143957(使用django 1.2和1.3测试)
更新: 好消息!从django 1.5开始,您可以覆盖用户模型:Customizing the User model
答案 1 :(得分:1)
这样做没有害处。 只需更改模型和数据库中的长度:)
答案 2 :(得分:1)
创建用户个人资料模型,在那里添加非常长的用户名字段,然后使用它。当然这会使真正的用户名字段变得无用,但它比黑客攻击Django代码要好得多,这会让你在需要升级时遇到麻烦。
答案 3 :(得分:1)
对我来说,下面的代码很有效,而且很简单。
from django.contrib.auth.models import AbstractUser
class MyUser(AbstractUser):
....
# your custom fields
MyUser._meta.get_field('username').max_length = 255 # or 100
您可以运行迁移
答案 4 :(得分:0)
如果您手动更改数据库以及相应的模型,则应该没有问题。
你也可以改回来,否则我会说备份以防万一,但我不确定它是否必要
答案 5 :(得分:0)
对于未来的需求,这是我发现的最好和最简单的方法:
答案 6 :(得分:0)
另一种解决方案是更改您的身份验证代码。当新用户注册时,他们会输入一封电子邮件,您将其保存在电子邮件字段中,以便拥有它,如果他们的电子邮件大于30个字符,则在将其放入用户字段之前将其缩短。然后,更改新登录的登录验证。