如何重写User对象的默认get_absolute_url?

32 投票
2 回答
5060 浏览
提问于 2025-04-15 19:41

我正在尝试制作一个通用的表格,用来列出django_tables对象。现在一切都正常工作,除了我的User对象的get_absolute_urls()方法返回了:

/users/<username>/

虽然我可以创建这个网址,但它和网站的其他布局不太匹配,所以我在寻找其他解决办法。有没有办法在不影响内置认证和其他功能的情况下,覆盖这个值呢?

2 个回答

0

顺便提一下:

从django v1.7开始,django.contrib.auth.models.AbstractUser不再定义get_absolute_url()这个方法(详细信息请查看发布说明)。

所以,如果你使用的是django版本大于1.7,那么原作者的问题就不存在了,因为你需要自己定义一个get_absolute_url()方法。

现在有两种方法可以做到这一点:

  1. 在你的用户模型扩展中定义一个get_absolute_url()方法。
  2. 使用Mark Lavin的答案中的解决方案,通过ABSOLUTE_URL_OVERRIDES设置来创建(而不是覆盖)User.get_absolute_url()
50

你可以在你的settings.py文件中使用设置 ABSOLUTE_URL_OVERRIDES 来实现这个功能。

ABSOLUTE_URL_OVERRIDES = {
    'auth.user': lambda u: "/users/%s/" % u.username,
}

这里有一个官方文档的链接: https://docs.djangoproject.com/en/stable/ref/settings/

撰写回答