Задать вопрос

Django request в модели — как менять ссылку?

Есть следующий код модели:
def get_absolute_url(self):
     return reverse('vehicle-detail', kwargs={'pk': self.pk})


Хотелось бы менять эту ссылку, в зависимости от того, юзер является staff или нет.
Казалось бы вполне логично.
Но я не могу, потому что request'а нету в модели

Как бы вы поступили?
  • Вопрос задан
  • 2554 просмотра
Подписаться 4 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Assargin
@Assargin
Перед ответом смотрю наличие ✔ в ваших вопросах
Сам с Django работаю недолго, но есть мнение, что модель ничего не должна знать о реквестах. Поэтому я бы урл формировал не в модели, а, например, во views.py
Ответ написан
Пожалуйста, опишите подробнее, зачем это вам нужно.

Вероятно, в случае, если пользователь имеет флаг `is_stuff` установленным, он получает больше информации об объекте. Может быть, шаблон другой. И для этого для админов и для не-админов сделаны отдельные страницы с разными URL. Но зачем? Я бы сделал проще: пусть URL будет одним и тем же для всех, а уж конечная страница, точнее, её view, самостоятельно определяет на основании `request.user`, что делать, что пользователю показывать, с каким шаблоном.

А иначе админы захотят расшарить ссылку на страницу где-нибудь, посторонний человек тыкнет - а там 403.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы