3
votes

ListView n'a pas de QuerySet. Définissez ListView.model, ListView.queryset ou remplacez ListView.get_queryset ()

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


0 commentaires

3 Réponses :


3
votes

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.


0 commentaires

0
votes

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


0 commentaires

0
votes

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.


0 commentaires