【问题标题】:Accessing User.get_absolute_url in Django 1.7在 Django 1.7 中访问 User.get_absolute_url
【发布时间】:2014-09-08 23:05:59
【问题描述】:

我刚刚从 Django 1.5 升级到 1.7,现在我的用户对象上没有 get_absolute_url 方法。

这曾经有效:

In [1]: from django.contrib.auth.models import User

In [2]: u = User.objects.get(pk=1)

In [3]: u.get_absolute_url()
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-5c5e8a279785> in <module>()
----> 1 u.get_absolute_url()

AttributeError: 'User' object has no attribute 'get_absolute_url'

In [4]: 

作为参考,这是我在 settings.py 中的内容:

ABSOLUTE_URL_OVERRIDES = {
    'auth.user': lambda u: u'/course/profile/{0}'.format(u.username)
}

关于什么可能导致这种情况的任何想法?

【问题讨论】:

    标签: django django-authentication django-1.7


    【解决方案1】:

    从 Django 1.7 开始,AbstractUser 不再定义 get_absolute_url 方法。 release notes中提到了这一点。

    在 Django 1.7 中,您不能将 ABSOLUTE_URL_OVERRIDES 用于没有 get_absolute_url 方法的模型。这已在 ticket 11775 中修复。从 Django 1.7.1 (release notes) 起,您可以将 ABSOLUTE_URL_OVERRIDES 与任何模型一起使用。

    【讨论】:

    • 我为发行说明打开了这个拉取请求:github.com/django/django/pull/3200——但正如我所提到的,可能应该为此添加一个向后不兼容的更改,对吧?我想我将尝试使用自定义用户模型,只是为了恢复此方法。
    • Django 1.7.1 恢复了将ABSOLUTE_URL_OVERRIDES 与 auth.user 模型一起使用的能力。见release notes
    • @robert_b_clarke 感谢您的评论,我已经更新了答案。
    • 对于再次遇到此问题并使用与 Django 文档相同的语法的任何人: ABSOLUTE_URL_OVERRIDES = { 'auth.user': lambda o: "/users/%s/" % o.username, }跨度>
    猜你喜欢
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多