【发布时间】:2019-11-30 01:53:13
【问题描述】:
我正在尝试使用 JWT 实现注销视图。我的用户继承过去是从 django.contrib.auth.models.User 继承的,但我改成 AbstractUser 认为这些问题会消失。
当我在 settings.py 中定义 AUTH_USER_MODEL = 'portal.User' 并尝试运行 ./manage.py migrate 时,我收到此错误:
django.db.utils.ProgrammingError: relation "portal_user" does not exist
settings.py
JWT_AUTH = {
...
'JWT_GET_USER_SECRET_KEY': 'portal.models.jwt_get_secret_key',
}
models.py
def jwt_get_secret_key(user_model):
return user_model.jwt_secret
class User(AbstractUser):
USERNAME_FIELD = 'username'
NAME_FIELD = 'name'
EMAIL_FIELD = 'email'
name = models.CharField(max_length=150)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
subscriptions = models.ManyToManyField(Subscription,
related_name='user_subscriptions')
jwt_secret = models.UUIDField(default=uuid.uuid4)
...
如果我删除 AUTH_USER_MODEL = 'portal.User',它会返回:
auth.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'User.groups'.
HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups'.
auth.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'User.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'User.user_permissions'.
portal.User.groups: (fields.E304) Reverse accessor for 'User.groups' clashes with reverse accessor for 'User.groups'.
HINT: Add or change a related_name argument to the definition for 'User.groups' or 'User.groups'.
portal.User.user_permissions: (fields.E304) Reverse accessor for 'User.user_permissions' clashes with reverse accessor for 'User.user_permissions'.
HINT: Add or change a related_name argument to the definition for 'User.user_permissions' or 'User.user_permissions'.
我尝试删除数据库并创建另一个数据库,但问题仍然存在。
【问题讨论】:
-
请显示给出第一个错误的完整回溯。启动时似乎有东西在查询您的模型,但这里没有足够的信息来查看是什么。
-
在进行任何迁移后更改
AUTH_USER_MODEL会带来各种问题。有关更多信息,请参阅:docs.djangoproject.com/en/2.2/topics/auth/customizing/… -
但是如果我删除数据库和迁移并再次运行迁移呢?我试过了。
标签: django django-rest-framework django-rest-framework-jwt