如何重写User对象的默认get_absolute_url?
我正在尝试制作一个通用的表格,用来列出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()
方法。
现在有两种方法可以做到这一点:
- 在你的用户模型扩展中定义一个
get_absolute_url()
方法。 - 使用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/