8

在有人将这个问题标记为这个问题的重复之前django 的 auth_user.username 可以是 varchar(75) 吗?那怎么可能呢?或关于 SO 的其他此类问题,请阅读此问题。我链接到的问题准确地提出了这个问题,但不幸的是,答案并没有解决所提出的问题。

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

  1. 在数据库中为用户名字段运行 ALTER 表
  2. 在此处更改 max_length:username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))

如果我这样做会破坏 Django 中的任何东西吗?

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

4

7 回答 7

20

您需要在几个地方修补 max-length:模型字段的描述、表单字段的描述和最大长度验证器。最大长度验证器附加到表单字段和模型字段。

这是一个代码片段,它将修补所有内容:

https://gist.github.com/1143957(用 django 1.2 和 1.3 测试)

更新:好消息!从 django 1.5 开始,您可以覆盖用户模型:自定义用户模型

于 2011-01-28T18:02:13.583 回答
1

创建一个用户配置文件模型,在其中添加您的超长用户名字段,然后使用它。当然这会使真正的用户名字段无用,但它比破解 Django 代码要好得多,后者会在需要升级时给你带来麻烦。

于 2011-01-28T18:48:12.727 回答
1

For me, the code below works and is simple well.

from django.contrib.auth.models import AbstractUser

class MyUser(AbstractUser):
    ....
    # your custom fields

MyUser._meta.get_field('username').max_length = 255  # or 100

after you can run your migration

于 2014-10-21T11:56:16.640 回答
1

这样做没有坏处。只需更改模型和数据库中的长度 :)

于 2011-01-28T14:19:39.073 回答
0

如果您手动更改数据库以及相应的模型,那么应该没有问题。

你也可以改回来,我会说做一个备份以防万一,但我不确定它是否有必要

于 2011-01-28T12:07:51.880 回答
0

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

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

于 2013-10-10T23:55:05.453 回答
0

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

于 2014-09-16T19:06:05.993 回答