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

Как передать параметр url slug в DetailView?

Пытаюсь сделать страницу пользователя, что бы обращаться на страницу по username

urls.py в главной папке
urlpatterns = [
   #others
    path('user/', include('user.urls')),    
]

urls.py в папке приложения
from django.urls import path
from user.views import *
urlpatterns = [
    path('<slug:username>/', UserView.as_view(), name='userview'),
]

код views.py
from mymodels.models import CustomUser
from django.views.generic.detail import DetailView

class UserView(DetailView):
    model = CustomUser
    template_name = 'user/user.html'


В итоге ошибка:
Generic detail view UserView must be called with either an object pk or a slug in the URLconf.

Но если использовать pk
urlpatterns = [
    path('<int:pk>/', UserView.as_view(), name='userview'),
]

Тогда всё работает
  • Вопрос задан
  • 944 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Untiwe Автор вопроса
Надо было переопределить метод get_object. Его можно не определять, только если используется pk т.к. он используется по умолчанию.
Минимальное решение:
class UserView(DetailView):
    model = CustomUser
    template_name = 'user/user.html'

    def get_object(self):
        pass


Но я не до конца понял как оно работает. Буду рад объяснению или ссылке на документацию эта не дала полной картины
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽