Переопределить значение по умолчанию get_absolute_url на объектах пользователя?
Я пытаюсь создать общую таблицу для перечисления объектов django_tables
. У меня все работает, за исключением того, что get_absolute_urls()
на моих объектах User
возвращает:
/users/<username>/
Пока я мог создать этот URL-адрес, он не совпадает с остальной частью макета сайта, поэтому я ищу другой способ сделать это. Есть ли способ переопределить это значение, не нарушая встроенную аутентификацию и другие функции?
Ответы
Ответ 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()
.
Теперь есть два способа сделать это:
- Определите метод
get_absolute_url()
в расширении вашей пользовательской модели.
- Используйте решение из ответа Марка Лавина, чтобы создать (не перезаписать) параметр
User.get_absolute_url()
через ABSOLUTE_URL_OVERRIDES
.