【问题标题】:Override default get_absolute_url on User objects?覆盖用户对象上的默认 get_absolute_url?
【发布时间】:2011-01-20 16:29:21
【问题描述】:

我正在尝试制作一个用于列出 django_tables 对象的通用表。除了我的User 对象上的get_absolute_urls() 返回之外,我一切正常:

/users/<username>/

虽然我可以创建此 URL,但它与站点布局的其余部分不匹配,因此我正在寻找另一种方法来执行此操作。有没有办法在不破坏内置身份验证和其他功能的情况下覆盖这个值?

【问题讨论】:

    标签: django django-urls django-authentication


    【解决方案1】:

    附注:

    从 django v1.7 开始,django.contrib.auth.models.AbstractUser 不再定义 get_absolute_url() 方法(参见 release notes)。

    所以 django > v1.7 不会存在 OP 的问题,因为无论如何您都需要定义您的自定义 get_absolute_url() 方法。

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

    1. 在您的用户模型扩展中定义 get_absolute_url() 方法。
    2. 使用来自Mark Lavin's answer 的解决方案通过ABSOLUTE_URL_OVERRIDES 设置创建(而不是覆盖)User.get_absolute_url()

    【讨论】:

      【解决方案2】:

      您可以在 settings.py 文件中使用设置 ABSOLUTE_URL_OVERRIDES 进行此操作

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

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

      【讨论】:

      • 太棒了!设置文件是我没有寻找的一个地方。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2020-07-12
      相关资源
      最近更新 更多