Как исправить ошибку DetailView is missing a QuerySet Error?

Когда я пытаюсь использовать DetailView для просмотра своих сообщений, я продолжаю получать ошибку исключения.

Неправильная конфигурация в /musician_details/1/ В DetailView отсутствует QuerySet. Определите DetailView.model, DetailView.queryset или переопределите DetailView.get_queryset(). Метод запроса: GET URL запроса: http://127.0.0.1:8000/musician_details/1/. Версия Django: 3.2.5 Тип исключения: ImproperlyConfigured Значение исключения:
DetailView не хватает QuerySet. Определите DetailView.model, DetailView.queryset или переопределите DetailView.get_queryset(). Расположение исключения: C:\Program Files\Python38\lib\site-packages\django\views\generic\detail.py, line 69, in get_queryset Python Executable: C:\Program Files\Python38\python.exe Версия Python: 3.8.2 Python Path:
['F:\Полный стек\Django\Django Project\Test', 'C:\Program Files\Python38\python38.zip', 'C:\Program Files\Python38\DLLs', 'C:\Program Files\Python38\lib', 'C:\Program Files\Python38', 'C:\Users\Tanim\AppData\Roaming\Python\Python38\site-packages', 'C:\Program Files\Python38\lib\site-packages', 'C:\Program Files\Python38\lib\site-packages\win32', 'C:\Program Files\Python38\lib\site-packages\win32\lib', 'C:\Program Files\Python38\lib\site-packages\Pythonwin']. Время сервера: Sun, 19 Sep 2021 07:44:37 +0000

views.py

from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import View, TemplateView, ListView, DetailView
from home import models


class IndexView(ListView):
  

    context_object_name = 'musician_list'
    model = models.Musician
    template_name = 'first_app/index.html'


class MusicianDetail(DetailView):
    context_object_name = 'musician'
    model = models.Musician
    template_name = 'first_app/musician_details.html'

models.py

from django.db import models

# Create your models here.       
class Musician(models.Model):    
    first_name=models.CharField(max_length=50)
    last_name=models.CharField(max_length=50)
    instrument=models.CharField(max_length=50)

    def __str__(self):
        return self.first_name + " " + self.last_name        
   
class Album(models.Model):
    artist=models.ForeignKey(Musician, on_delete=models.CASCADE)
    name=models.CharField(max_length=100)
    release_date=models.DateField()    
    rating=(
    (1,"Worst"),
    (2,"Bad"),
    (3,"Not Bad"),
    (4,"Good"),
    (5,"Excellent!"),    
    )        
    num_Stars=models.IntegerField(choices=rating)
          
    def __str__(self):
        return self.name +", Rating: " +str(self.num_Stars)
    

models.py

from django.contrib import admin
from django.urls import path
from home import views

app_name = "home"

urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('musician_details/<pk>/', views.DetailView.as_view(), name='musician_details'),    
]

index.html

{% extends 'first_app/base.html' %}
{% block body_block %}

<ul>

{% for musician in musician_list %}

<li><a href="{% url 'home:musician_details' pk=musician.pk %}">{{musician.first_name}} {{musician.last_name}}</a> </li>  

{% endfor %}

</ul>

{% endblock %}  

musician_details.html

{% extends 'first_app/base.html' %}
{% block body_block %}

<h3>Musician Details:</h3>
<p>{{musician.first_name}} {{musician.last_name}}</p>
<p>{{musician.instrument}}</p>

{% endblock %} 

Ваш шаблон URL DetailView в urls.py неправильный.

Вам нужно использовать /<int:pk>/, а не /<pk>/.

Вы также использовали DetailView, поэтому исправьте его на MusicianDetail. То есть, вы называете свой музыкальный детальный вид MusicianDetail, поэтому для того, чтобы иметь корректные URL, вы должны использовать MusicianDetail в вашем urls.py. DetailView - это не что иное, как родительский класс для создания детального представления в проектах Django.

urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('musician_details/<int:pk>/', views. MusicianDetail.as_view(), name='musician_details'),    
]

модель = Музыкант после работы и вы делаете urls.py a int:pk тогда работает правильно

// views.py

class MusicianDetail(DetailView):
    context_object_name = 'musician'
    model = Musician
    template_name = 'first_app/musician_details.html'

// urls.py

urlpatterns = [
    path('', views.IndexView.as_view(), name='index'),
    path('musician_details/<int:pk>/', views.MusicianDetail.as_view(), 
name='musician_details'),    

]

Вернуться на верх