|
63
|
| Purrell · 技术社区 · 16 年前 |
|
|
1
78
有一种方法可以实现这一点,不需要触及核心模型,也不需要继承,但它绝对是黑客式的,我会格外小心地使用它。
如果你看姜戈的医生
on signals
你会看到有一个叫
所以这个计划很简单,只需将该信号注册到一个处理程序中,该处理程序将在调用该信号时检测
现在的问题是,这个代码应该住在哪里?必须在
一个更好的选择是把它放在一个虚拟应用的模型模块中,然后放在这个应用上。
在上面
这就行了。 不过需要注意的是:
如果你在用 South ,可以创建以下迁移以更改基础数据库中的列:
|
|
|
2
25
基于上面的cl_ement和Matt Miller的综合答案,我已经开发了一个实现它的快速应用程序。PIP安装、迁移和执行。将此作为评论,但还没有可信度! https://github.com/GoodCloud/django-longer-username 编辑2014-1208 上述模块现已弃用,取而代之的是 https://github.com/madssj/django-longer-username-and-email |
|
|
3
20
Django 1.3版本的更新解决方案(不修改manage.py): 创建新的django应用程序:
首先安装:(settings.py)
这里是models.py:
|
|
|
4
5
上面的解决方案似乎确实更新了模型长度。但是,为了在admin中反映您的自定义长度,您还需要重写管理表单(令人沮丧的是,它们不只是从模型继承长度)。
|
|
|
5
2
据我所知 override user model 因为django 1.5可以解决一个问题。简单实例 here |
|
|
6
1
如果您只是修改数据库表,那么您仍然需要处理Django的验证,因此它无论如何都不会让您超过30个字符。
创建电子邮件认证并不难。这里有一个 super simple email auth backend 你可以使用。在这之后你需要做的是添加一些验证,以确保电子邮件地址是唯一的,并且你已经完成了。那很容易。 |
|
|
7
1
是的,可以。至少我认为这是可行的;我最终替换了整个auth模型,所以如果这不可行的话,我们准备好更正… 如果您没有您关心的用户记录:
如果您有需要保留的用户记录,那么就更复杂了,因为您需要以某种方式迁移它们。最简单的是将数据从旧表备份和还原到新表,例如:
或者,使用mad python django skillz,将用户模型实例从旧复制到新,并替换:
后者不像听起来那么难,但显然需要做更多的工作。 |
|
|
8
1
从根本上讲,问题在于,有些人希望使用电子邮件地址作为唯一标识符,而Django的用户认证系统需要一个最多30个字符的唯一用户名。也许这在将来会改变,但在我写作的时候,django 1.3就是这样。 我们知道,对于许多电子邮件地址来说,30个字符太短;即使75个字符也不足以表示某些电子邮件地址,如中所述。 What is the optimal length for an email address in a database? . 我喜欢简单的解决方案,所以我建议将电子邮件地址散列为一个用户名,以适应Django中用户名的限制。根据 User authentication in Django ,用户名最多必须为30个字符,由字母数字字符和、@、+、。和。因此,如果我们使用base-64编码并小心地替换特殊字符,则最多可以有180位。因此,我们可以使用类似于sha-1的160位散列函数,如下所示:
简而言之,此函数将任何电子邮件地址的用户名关联起来。我知道散列函数中发生冲突的可能性很小,但在大多数应用程序中这不应该是一个问题。 |
|
|
9
0
只需在settings.py的底部添加以下代码
|
|
|
10
0
C:…\venv\lib\site packages\django\contrib\auth\models.py first_name=models.charfield(('first name'),max_length=30,blank=true) 改为 first_name=models.charfield(('first name'),max_length=75,blank=true) 节约 以及数据库中的更改 |
|
|
11
-1
我使用的是django 1.4.3,这使得它非常简单,在意识到我想使用长电子邮件地址作为用户名后,我不需要更改代码中的任何其他内容。 如果您可以直接访问数据库,请将其更改为您希望的字符数,在我的例子中是100个字符。 在应用程序模型(myapp/models.py)中添加以下内容
然后在settings.py中指定模型:
|
|
|
12
-2
最好的解决方案是使用电子邮件字段作为电子邮件,使用用户名作为用户名。 在输入登录表单验证中,查找数据是用户名还是电子邮件,如果是电子邮件,则查询电子邮件字段。
这只需要猴子修补
它远比修改模型和数据库表要好。 |
|
|
13
-2
如果您使用的是venv(虚拟环境),最简单的解决方案可能就是直接更新核心代码,即打开以下两个文件: --venv/lib/python2.7/sites-packages/django/contrib/auth/model.py -venv/lib/python2.7/sites-packages/django/contrib/auth/forms.py 搜索所有用户名字段,并将最大长度从30更改为100。它是安全的,因为你已经在使用Venv,所以它不会影响任何其他Django项目。 |
|
|
Patrick Bond · 如何将模型中的函数结果添加到列表中? 1 年前 |
|
|
bur · 每次从模板调用方法都会查询数据库吗? 1 年前 |
|
|
Stefan · 在子目录中设置Django 1 年前 |
|
|
vale383 · 如何在Django端点中查找user_id 1 年前 |
|
|
Kovy Jacob · Django在动态URL段中添加斜线 1 年前 |
|
|
user987 · 如何在Django中访问提交的表单请求数据 1 年前 |
|
|
user24242514 · 将嵌套查询字符串请求转换为字典 1 年前 |