【问题标题】:How to fix DetailView is missing a QuerySet Error?如何修复 DetailView 缺少 QuerySet 错误?
【发布时间】:2021-11-13 09:34:48
【问题描述】:

当我尝试使用 DetailView 查看我的帖子时,我不断收到异常错误。

在 /musician_details/1/ 处配置不正确 DetailView 缺少 QuerySet。定义 DetailView.model、DetailView.queryset,或覆盖 DetailView.get_queryset()。 请求方法:GET 请求网址:http://127.0.0.1:8000/musician_details/1/ Django 版本:3.2.5 异常类型:配置不当 异常值:
DetailView 缺少 QuerySet。定义 DetailView.model、DetailView.queryset,或覆盖 DetailView.get_queryset()。 异常位置:C:\Program Files\Python38\lib\site-packages\django\views\generic\detail.py,第 69 行,在 get_queryset Python 可执行文件:C:\Program Files\Python38\python.exe Python版本:3.8.2 Python 路径:
['F:\Full Stack\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 %} 

【问题讨论】:

  • 我编辑了我的答案,你基本上犯了两个错误。我错过了第二个。
  • 请解释我的第二个错误(Detailview)。我不明白。
  • 我认为您的 IDE 建议您使用 views.py 中的可用对象。由于您在views.py 中导入了DetailView,因此也建议使用。您错误地选择了DetailView,但您为详细视图创建了MusicianDetail,因此您需要使用MusicianDetail,而不是父类。

标签: python django detailview


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    模特 = 音乐家 下班后 和 你做 urls.py 一个 int:pk 然后工作正常

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    urls.py 中的 DetailView URL 模式错误。

    您需要使用/&lt;int:pk&gt;/ 而不是/&lt;pk&gt;/

    您还使用了DetailView,因此将其修复为MusicianDetail。也就是说,您将音乐家详细视图称为MusicianDetail,因此为了获得有效的 URL,您必须在您的urls.py 中使用MusicianDetailDetailView 只不过是在 Django 项目中创建详细视图的父类。

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

    【讨论】:

      猜你喜欢
      • 2019-09-11
      • 2017-08-20
      • 2021-03-10
      • 2011-11-26
      • 1970-01-01
      • 2020-11-18
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      相关资源
      最近更新 更多