【问题标题】:Value too long for type character varying(30)类型字符变化的值太长(30)
【发布时间】:2012-10-02 06:37:07
【问题描述】:

我在email field 上收到此错误消息,但我使用的是内置的django auth system。有没有简单的方法来覆盖它。当用户注册时,电子邮件地址被添加到内置用户系统的内置字段中。

由于网站的性质,如果可以将其扩展超过 30 个字符,那就太好了。

【问题讨论】:

标签: django django-admin django-authentication django-authopenid


【解决方案1】:

这是在 Django 中使用电子邮件地址作为用户名的问题之一。很多很多电子邮件都超过 30 个字符。解决此问题的一种常见方法是使用自定义“身份验证后端”进行电子邮件身份验证。使用您自己的后端,您可以基于 email 字段而不是 username 字段来验证用户。然后,您可以根据该电子邮件地址或使用随机生成的用户名生成用户名。

您可以在我的博文Django Authentication using an Email Address 上阅读有关此方法的更多信息。

【讨论】:

  • 感谢您的回复 Micah,我会读一读。唯一的事情是我正在开发的网站相当大,并且已经有几百个用户。这很重要,还是真的需要从初始站点构建中查看? p.s.感谢您提供指向博客的链接,以后会更频繁地访问 :)
  • 应该没问题。事实上,在我的网站中,我通常有两个后端——用户可以使用用户名电子邮件地址,并且可以很容易地在现有系统中实现。只需检查以确保你没有'首先在auth_user 中没有现有的重复电子邮件地址。
  • 谢谢,我已与我们的其他开发人员谈过话,我认为会继续使用您的解决方案。再次感谢您的帮助!
  • 您的链接已关闭,请将完整答案放在这里或更新您的答案以提供另一个位置。
【解决方案2】:

也许这不是正确的方法,但在我的项目中,我只是增加了南用户电子邮件的大小。示例:

    >> ./manage.py schemamigration auth --initial && ./manage migrate auth --fake

然后我添加到models.py中:

    from django.contrib.auth.models import User
    field = User._meta.get_field('email')
    field.max_length = 254
    field = User._meta.get_field('username')
    field.max_length = 254

现在:

    >> ./manage.py schemamigration auth --auto
    >> ./manage.py migrate auth

【讨论】:

  • 提示:在 settings.py 添加 SOUTH_MIGRATION_MODULES = { 'auth': 'migrations', } 并使用 init.py 添加一个文件夹迁移,否则南会创建django 安装中的迁移,你需要在你的项目文件夹和 vcs 中使用它
猜你喜欢
  • 2011-12-06
  • 2020-04-04
  • 2012-02-20
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
相关资源
最近更新 更多