【问题标题】:Username still too long, despite defining custom field尽管定义了自定义字段,但用户名仍然太长
【发布时间】:2013-07-01 09:24:52
【问题描述】:

用户名过长时出现错误:

/account/register/ 处的警告

第 1 行的“用户名”列的数据被截断

我已经在使用自定义用户模型,所以我添加了一个新字段并将其设为USERNAME_FIELD

class MyUser(AbstractUser):
    USERNAME_FIELD = 'identifier'
    identifier = models.EmailField(unique=True,default="")
    ...

我分几步进行设置,添加不带unique=True 的字段,进行数据迁移,然后添加约束。然而,令我沮丧的是,当我去测试我的新模型时,我得到了同样的错误。 EmailField 的长度为 75(username 为 30),尝试添加用户名为 50 个字符的用户会导致错误。

在我的注册视图中,我按如下方式注册用户(此行会引发错误):

new_user = MyUser.objects.create_user(form.cleaned_data['username'], 
                                      form.cleaned_data['email'], 
                                      form.cleaned_data['password1'])

我应该采用不同的方法吗?不调用create_user可以手动创建用户吗?

【问题讨论】:

    标签: django django-models django-authentication


    【解决方案1】:

    我放弃了这个方法,只是手动写了一个migration直接修改数据库:

    class Migration(SchemaMigration):
    
        def forwards(self, orm):
            db.alter_column(u'app_myuser', 'username', self.gf('django.db.models.fields.CharField')(unique=True,max_length=75))
    
        def backwards(self, orm):
            db.alter_column(u'app_myuser', 'username', self.gf('django.db.models.fields.CharField')(unique=True,max_length=30))
    

    简单得多。

    【讨论】:

    • 不错,它是解决您问题的明智之选。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2015-12-11
    相关资源
    最近更新 更多