试图创建我的自定义用户模型,这是我的代码:
models.py
class CustomUser(AbstractUser):
USERNAME_FIELD = 'email'
CustomUser._meta.get_field_by_name('email')[0]._unique=True
Run Code Online (Sandbox Code Playgroud)
settings.py
AUTH_USER_MODEL = 'myapp.CustomUser'
Run Code Online (Sandbox Code Playgroud)
执行manage.py syncdb时,会发生以下错误:
CommandError: One or more models did not validate:
myapp.customuser: The field named as the USERNAME_FIELD should not be included in REQUIRED_FIELDS on a swappable User model.
Run Code Online (Sandbox Code Playgroud)
任何人都能解释一下吗?有没有更好的方法在Django 1.6中自定义用户模型而不重写扩展AbstractBaseUser的整个类?
顺便说一句,如果我从我的代码中删除USERNAME_FIELD ='email'并更改核心django auth/models.py >> AbstractUser定义,它就可以了.我似乎无法覆盖USERNAME_FIELD ...
谢谢!
Josvic,您的解决方案部分解决了我的问题。最后我要做的是:
class CustomUser(AbstractUser):
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['username']
def get_username(self):
return self.email
CustomUser._meta.get_field_by_name('email')[0]._unique=True
Run Code Online (Sandbox Code Playgroud)
这解决了 REQUIRED_FIELDS 不能包含 USERNAME_FIELD 的初始问题,并且由于我不想重新定义整个 User 并扩展 AbstractBaseUser,我必须在 REQUIRED_FIELD 中包含“用户名”,否则同步数据库因其他原因而失败(预计用户名以便将其保存到数据库中):
self.UserModel._default_manager.db_manager(database).create_superuser(**user_data)
TypeError: create_superuser() takes exactly 4 arguments (3 given)
Run Code Online (Sandbox Code Playgroud)
因此,当第一次执行同步数据库并且必须输入超级用户时,必须输入两次电子邮件,作为电子邮件和用户名。这很尴尬,但它是我能忍受的最干净的。
干杯!
| 归档时间: |
|
| 查看次数: |
5229 次 |
| 最近记录: |