Подтвердить что ты не робот

Переопределить значение по умолчанию get_absolute_url на объектах пользователя?

Я пытаюсь создать общую таблицу для перечисления объектов django_tables. У меня все работает, за исключением того, что get_absolute_urls() на моих объектах User возвращает:

/users/<username>/

Пока я мог создать этот URL-адрес, он не совпадает с остальной частью макета сайта, поэтому я ищу другой способ сделать это. Есть ли способ переопределить это значение, не нарушая встроенную аутентификацию и другие функции?

4b9b3361

Ответ 1

Вы можете сделать это в файле settings.py с помощью параметра ABSOLUTE_URL_OVERRIDES

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

Здесь ссылка на официальные документы: https://docs.djangoproject.com/en/stable/ref/settings/

Ответ 2

Как примечание стороны:

Начиная с django v1.7, django.contrib.auth.models.AbstractUser больше не определяет метод get_absolute_url() (см. примечания к выпуску).

Таким образом, проблема с OP не будет существовать с django> v1.7, так как вам все равно нужно определить свой собственный метод get_absolute_url().

Теперь есть два способа сделать это:

  1. Определите метод get_absolute_url() в расширении вашей пользовательской модели.
  2. Используйте решение из ответа Марка Лавина, чтобы создать (не перезаписать) параметр User.get_absolute_url() через ABSOLUTE_URL_OVERRIDES.