我可以将Django的auth_user.username字段更改为100个字符而不会破坏任何内容吗?

时间:2011-01-28 12:00:54

标签: django django-authentication

在某人将此问题标记为此问题的副本Can django's auth_user.username be varchar(75)? How could that be done?或其他此类问题之前,请阅读此问题。我联系到的问题是准确地提出这个问题,但不幸的是,答案没有解决被问到的问题。

我可以通过执行以下操作将auth_user.username字段更改为100个字符:

  1. 在DB中为用户名字段
  2. 运行ALTER表
  3. 在此处更改max_length:username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))
  4. 如果我这样做,它会破坏Django中的任何东西吗?

    当我将Django更新到更高版本时,这会破坏不是问题。我也不是在考虑编写其他身份验证方法。我只是想知道如果我这样做,我是否会破坏任何东西。

7 个答案:

答案 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)

对于未来的需求,这是我发现的最好和最简单的方法:

https://github.com/GoodCloud/django-longer-username

答案 6 :(得分:0)

另一种解决方案是更改您的身份验证代码。当新用户注册时,他们会输入一封电子邮件,您将其保存在电子邮件字段中,以便拥有它,如果他们的电子邮件大于30个字符,则在将其放入用户字段之前将其缩短。然后,更改新登录的登录验证。