@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'),
]

Тогда всё работает
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 2
@bacon
Очень рекомендую изучить исходники этих view, параметры заданные в path находятся в self.kwargs
ЗЫ Раз изменил вопрос, кроме этого, тебе надо переопределить метод get_object
Ответ написан
@Untiwe Автор вопроса
Надо было переопределить метод get_object. Его можно не определять, только если используется pk т.к. он используется по умолчанию.
Минимальное решение:
class UserView(DetailView):
    model = CustomUser
    template_name = 'user/user.html'

    def get_object(self):
        pass


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

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

Войти через центр авторизации
Похожие вопросы