Django auth 用户邮箱字段被截断
我在使用django.contrib.auth的用户模型时遇到了一个问题,那个模型里的邮箱长度限制是75个字符。
我从Facebook的接口收到了一些超过75个字符的邮箱地址,我希望能把这些邮箱存储在用户信息里,这样可以保持Facebook用户和其他用户之间的一致性。
我可以通过手动编辑我们的MySQL数据库来解决“Data truncated for column 'email' at row 1
”这个问题,但有没有更好的解决办法呢?最好是那种不需要我每次重置数据库时都手动编辑的方法。
只要我能把修改加到重置脚本里,或者放到initial_data.json文件中,我是可以接受编辑数据库的。
2 个回答
2
现在有一个提案,想要在Django中增加电子邮件字段的长度:http://code.djangoproject.com/ticket/11579
12
EmailField的长度被固定为75个字符,这是Django中的一个默认设置。你可以这样来解决这个问题:
from django.db.models.fields import EmailField
def email_field_init(self, *args, **kwargs):
kwargs['max_length'] = kwargs.get('max_length', 200)
CharField.__init__(self, *args, **kwargs)
EmailField.__init__ = email_field_init
不过这样做会改变所有EmailField字段的长度,所以你也可以尝试以下方法:
from django.contrib.auth.models import User
from django.utils.translation import ugettext as _
from django.db import models
User.email = models.EmailField(_('e-mail address'), blank=True, max_length=200)
无论哪种方式,最好把这段代码放在任何模块的初始化部分,并且要在你的INSTALLED_APPS中django.contrib.auth之前。
从Django 1.5开始,你可以基于AbstractUser模型创建自己的自定义模型,这样你就可以使用自己定义的字段和长度了。
在你的模型中:
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
email = models.EmailField(_('e-mail address'), blank=True, max_length=200)
在设置中:
AUTH_USER_MODEL = 'your_app.models.User'