众所周知, Django自带的Auth backend username最大只支持30个字符, 对应的Django admin也是这么校验的。 最近项目换了Oauth, 想把Oauth id直接存到username上方便登陆和管理。问题来了。。 auth模块是随Django一起安装的, 我想没人会有想法去改site-packages吧? 考虑到项目的部署方便, 因此只能在项目代码中想办法把这个可恶的限制去掉。
尝试1: 找Django提供的接口:
很遗憾,这个长度是Django直接hard code的:
class AbstractUser(AbstractBaseUser, PermissionsMixin):
"""
An abstract base class implementing a fully featured User model with
admin-compliant permissions.
Username, password and email are required. Other fields are optional.
"""
username = models.CharField(_('username'), max_length=30, unique=True,
help_text=_('Required. 30 characters or fewer. Letters, numbers and '
'@/./+/-/_ characters'),
validators=[
validators.RegexValidator(re.compile('^[\w.@+-]+$'), _('Enter a valid username.'), 'invalid')
])