我已迁移到 Django 自定义用户模型 (CustomUser),其中几个其他模型具有外键和 M2M 关系。CustomUser 也是 Zinnia 的作者模型 (Author) 的子类 - Zinnia 是一款出色的第三方博客应用。
我的问题是,当我通过关系(例如 OtherModel.customuser)访问 CustomUser 时,它返回 CustomUser 的实例,但在我访问 request.User 时,它是 Author 的实例。由于 Author 和 CustomUser 的属性是相同的,这通常没有太大区别,但是如果我想在我的视图中测试用户对象的等价性,我必须使用 request.user.id 而不是 request.user,我本能地不这样做'我不喜欢我正在处理的模型模棱两可。
可能我最好克服它并保持原样,因为在我的视图中进行了一些小的代码更改后一切正常。然而,在一个完美的世界里,我会一直提到相同的用户模型,但不确定如何最好地进步。有任何想法吗?
设置.py
AUTH_USER_MODEL = 'profiles.CustomUser'
models.py(在配置文件应用程序中)
class CustomUser(AbstractUser):
visits = models.PositiveIntegerField(
_('visits'),
default=0,
blank=True
)
def __unicode__(self):
return self.username
class OtherModel(models.Model):
author = models.ForeignKey(CustomUser)
我知道文档中的建议是与 settings.AUTH_USER_MODEL 建立关系,而不是直接与自定义用户模型建立关系。我计划改变这一点,但想在再次陷入迁移的痛苦之前了解我在做什么
author.py(在百日草应用中)
from django.contrib.auth import get_user_model
@python_2_unicode_compatible
class Author(get_user_model()):
"""
Proxy model around :class:`django.contrib.auth.models.get_user_model`.
"""
objects = get_user_model()._default_manager
published = EntryRelatedPublishedManager()
在控制台中 get_user_model() 返回profiles.models.CustomUser 类