Je ne comprends pas vraiment ce qui cause l'erreur j'ai vérifié les documentations et il y avait un exemple très similaire de celui-ci ici est mon views.py, urls.py sous mon application que j'utilise include et le modèle
views.py
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
urls.py
{% 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 %}
et mon modèle
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') ]
3 Réponses :
Il y a une erreur dans votre urls.py
, vous n'avez pas fait référence à la SchoolListView
, mais à la ListView générique
lui-même. Vous pouvez résoudre ce problème en écrivant:
# 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') ]
Puisque vous avez importé le ListView
dans votre views.py
, l'interpréteur ne fait aucune erreur lors de l'utilisation views.ListView
, vous avez simplement "réexporté" le ListView
dans votre views.py
.
Probablement vous aussi défini SchoolDetailView
au lieu de DetailView
, et probablement l'URL doit contenir la clé primaire de l'école pour laquelle vous souhaitez afficher les détails, mais vous n'avez pas fourni suffisamment de code pour résoudre ce problème.
views.py doit être:
class SchoolListView(ListView): context_object_name = 'schools' models = models.School def get_queryset(self): """Return Schools """ return models.School.objects.order_by('id')
Tout d'abord, vous devez ajouter une fonction get_queryset à votre classe SchoolListView comme ceci:
def get_queryset (self): renvoyer models.School.objects.order_by ('id')
puis remplacez ListView dans views.ListView.as_view () (dans urls.py) par SchoolListView.