Search code examples
djangodetailview

How to fix Django DetailView Missing query set exception error


When I try to use DetailView to view my posts I keep getting an exception error.

ImproperlyConfigured at /post/1/ BlogDetailView is missing a QuerySet. Define BlogDetailView.model, BlogDetailView.queryset, or override BlogDetailView.get_queryset(). Request Method: GET Request URL: http://127.0.0.1:8000/post/1/ Django Version: 2.2 Exception Type: ImproperlyConfigured Exception Value:
BlogDetailView is missing a QuerySet. Define BlogDetailView.model, BlogDetailView.queryset, or override BlogDetailView.get_queryset(). Exception Location: C:\Users\julia.virtualenvs\Documents-SYi_ANcG\lib\site-packages\django\views\generic\detail.py in get_queryset, line 73 Python Executable: C:\Users\julia.virtualenvs\Documents-SYi_ANcG\Scripts\python.exe Python Version: 3.7.3

I have reviewed my code against the book Django For Beginners by Will Vicent Still I can't find any problems

models.py

from django.db import models

# Create your models here.

class Post(models.Model):

    title = models.CharField(max_length=200)

    author = models.ForeignKey(

        'auth.User',

        on_delete=models.CASCADE,

    )
    body = models.TextField()

    def __str__(self):

        return self.title

views.py

from django.views.generic import ListView, DetailView # new
from .models import Post

# Create your views here.

class BlogListView(ListView):

    model = Post

    template_name = 'home.html'

class BlogDetailView(DetailView): # new

    Model = Post

    template_name = 'post_detail.html'

urls.py

# blog/urls.py
from django.urls import path
from .views import BlogListView, BlogDetailView # new

urlpatterns = [

    path('post/<int:pk>/', BlogDetailView.as_view(), name='post_detail'), # new

    path('', BlogListView.as_view(), name='home'),

]

post_detail.html

<!-- templates/post_detail.html-->
{% extends 'base.html' %}

{% block content %}
    <div class="post-entry">
        <h2>{{ post.title }}</h2>
        <p>{{ post.body }}</p>
    </div>

{% endblock content %}

This code is supposed to allow me to see my posts when I browse to http://127.0.0.1/posts/1 or post/2


Solution

  • You have a simple typo in your DetailView: Model instead of model.