小编san*_*ago的帖子

Django自定义用户模型子类(由Zinnia提供)

我已经迁移到Django自定义用户模型(CustomUser),其中几个其他模型具有外键和M2M关系.CustomUser也是Zinnia的作者模型(作者)的子类 - Zinnia是一个优秀的第三方博客应用程序.

我的问题是,当我通过一个关系访问CustomUser时,例如OtherModel.customuser,它返回一个CustomUser实例,但在我的视图中,当我访问request.User时,它是Author的一个实例.由于Author和CustomUser的属性是相同的,这一般没有太大的区别,但如果我想在我的视图中测试用户对象的等价性,我必须用户request.user.id而不是request.user,我本能地穿上​​'喜欢我所处理的模型的模糊性.

可能我会更好地克服它并保留原样,因为在我的视图中进行了一些小的代码更改之后一切正常.然而,在一个完美的世界中,我将始终指向相同的用户模型,但我不确定如何最好地进步.有任何想法吗?

settings.py

AUTH_USER_MODEL = 'profiles.CustomUser'
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

我知道文档中的建议是与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()
Run Code Online (Sandbox Code Playgroud)

在控制台中,get_user_model()返回profiles.models.CustomUser类

django zinnia

5
推荐指数
1
解决办法
435
查看次数

标签 统计

django ×1

zinnia ×1