Задать вопрос
@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'),
]

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

    def get_object(self):
        pass


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

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

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