ListView缺少QuerySet。定义ListView.model,ListView.queryset或覆盖ListView.get_queryset()

问题描述 投票:1回答:1

我真的不明白是什么原因导致错误我检查了文档,这里有一个非常类似的例子,这是我的views.py,urls.py在我的应用程序下我使用include和模板

views.朋友

class SchoolListView(ListView):
    context_object_name = 'schools'
    model = models.School

URLs.朋友

from django.urls import path
from . import views

#My name space
app_name = 'basicapp'
urlpatterns = [
    path('', views.ListView.as_view(), name='list'),
    path('details', views.DetailView.as_view(), name='details')
]

和我的模板

{% extends 'basicapp/basicapp_base.html'%}
{% block body_block %}
  <div class="jumbotron">
    <h1>Welcome to list of all schools</h1>
    <ol>
      {% for school in schools %}
      <h2><li><a href="{{school.id}}">{{school.name}}</a></li></h2>
      {% endfor %}
    </ol>

{% endblock %}

我得到这个错误,我真的不明白

Exception Type: ImproperlyConfigured
Exception Value:    
ListView is missing a QuerySet. Define ListView.model, ListView.queryset, or override ListView.get_queryset().


Traceback Switch to copy-and-paste view
C:\ProgramData\Miniconda3\lib\site-packages\django\core\handlers\exception.py in inner
            response = get_response(request) ...
▶ Local vars
C:\ProgramData\Miniconda3\lib\site-packages\django\core\handlers\base.py in _get_response
                response = self.process_exception_by_middleware(e, request) ...
▶ Local vars
C:\ProgramData\Miniconda3\lib\site-packages\django\core\handlers\base.py in _get_response
                response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
▶ Local vars
C:\ProgramData\Miniconda3\lib\site-packages\django\views\generic\base.py in view
            return self.dispatch(request, *args, **kwargs) ...
▶ Local vars
C:\ProgramData\Miniconda3\lib\site-packages\django\views\generic\base.py in dispatch
        return handler(request, *args, **kwargs) ...
▶ Local vars
C:\ProgramData\Miniconda3\lib\site-packages\django\views\generic\list.py in get
        self.object_list = self.get_queryset() ...
▶ Local vars
C:\ProgramData\Miniconda3\lib\site-packages\django\views\generic\list.py in get_queryset
                    'cls': self.__class__.__name__ ...
▶ Local vars
python django listview
1个回答
1
投票

你的urls.py有一个错误,你没有提到SchoolListView,而是指通用的ListView本身。你可以写下来解决这个问题:

# app/urls.py

from django.urls import path
from . import views

#My name space
app_name = 'basicapp'

urlpatterns = [
    # SchoolListView instead of ListView
    path('', views.SchoolListListView.as_view(), name='list'),
    # probably SchoolDetailView instead of DetailView, and with a pk in the url
    path('details', views.DetailView.as_view(), name='details')
]

由于您在ListView中导入了views.py,解释器在使用views.ListView时没有错误,您只需在ListView中“重新导出”views.py

可能你也定义了SchoolDetailView而不是DetailView,并且URL可能包含你想要显示详细信息的学校的主键,但是你没有提供足够的代码来解决这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.