2

Je produis une application web en Django qui stocke et trie des cours. Le problème que je rencontre est que l'ensemble de requêtes ne reconnaît pas le modèle. J'ai réussi à tout tirer dans une vue basée sur la classe et à faire des bêtises avec les données, cependant, quand j'essaie de faire un ensemble de requêtes, je dis simplement que le modèle "Course" n'est pas défini. J'ai importé le modèle suivant:Le modèle de queryset de vues basées sur la classe Django n'est pas défini

class Course(models.Model): 

    provider = models.ForeignKey(Provider) 

    title = models.CharField('Course Title', 
    max_length=200, 
    ) 

    first_line = models.CharField('Address Line: 1', 
    max_length=200, 
    ) 
    second_line = models.CharField('Address Line: 2', 
    max_length=200, 
    ) 
    third_line = models.CharField('Address Line: 3', 
    max_length=200, 
    ) 
    city = models.CharField('City', 
    max_length=200, 
    ) 
    post_code = models.CharField('Post Code', 
    max_length=200, 
    ) 
    course_description = models.TextField('Description') 
    date = models.DateField('Date') 

    start_time = models.TimeField('Starting time') 
    finish_time = models.TimeField('Finishing time') 
    duration = models.IntegerField('Number of hours') 
    CPD = models.IntegerField('CPD points') 
    link = models.CharField('Link', max_length=200) 
    category = models.ForeignKey(Categories) 
    gen_cat = models.ForeignKey(Gen_Categories) 
    location = models.ForeignKey(Gen_Location) 
    cost = models.FloatField('Cost') 

Et je la vue à base de classe suivante. Les fonctions qui sont là comme date_screen() ont été écrites dans un autre fichier et importées, elles fonctionnent dans mes vues basées sur les fonctions. Le problème est qu'il ne cesse de dire que Course n'est pas défini. Si vous trouvez quelque chose d'autre qui ne va pas dans la vue en classe, n'hésitez pas à m'en faire part. Je peux développer une vue basée sur la classe qui tire toutes les données, mais toute nuance est un tour de tête pour le moment.

class Courses_By_Location(ListView): 
    template_name = 'courses/course_list.html' 
    model = Course 

    def get_queryset(self): 
     self.Course = get_object_or_404(Course, name=self.args[0].order_by('date')) 
     raw_courses = Course.objects.filter(location=self.location) 
     courses = date_screen(raw_courses) 
     categories = category_screen(courses) 
     locations = location_screen(courses) 

    def get_context_data(self, **kwargs): 
     context = super(searchView, self).get_context_data(**kwargs) 
    context.update({'locations': self.locations, 
       'categories': self.categories, 
       'courses': self.courses, 
       'count': self.count,}) 
     return context 
+0

Si vous pouviez publier la vue basée sur la fonction de travail, il est plus probable que je puisse trouver une solution. – Matt

+0

Merci pour votre contribution. J'ai pris l'autre réponse car il a complètement réécrit la vue et cela fonctionne si bien et est très clair. Encore merci d'avoir pris le temps de m'aider. – max89

Répondre

1

Je ne sais pas exactement quel est le problème, mais il semble que vous placez des choses dans des endroits inappropriés.

# URLs 
url(
    r'^local/(?P<location>[-\w]+)/$', 
    views.Courses_By_Location.as_view(), 
    name='by_location', 
), 

# Views 
class Courses_By_Location(ListView): 
    model = Course 
    context_object_name = 'courses' 

    def dispatch(self, request, *args, **kwargs): 
     self.location = kwargs.get('location', 'DEFAULT-LOCATION') 
     return super().dispatch(request, *args, **kwargs) 

    def get_queryset(self): 
     # `date_screen` must return a QuerySet 
     return date_screen(
      # assuming the `Gen_Location` model has a `name` field 
      super().get_queryset().filter(location__name__iexact=self.location), 
     ) 

    def get_context_data(self, **kwargs): 
     context = super().get_context_data(**kwargs) 

     context['locations'] = location_screen(self.object_list) 
     context['categories'] = category_screen(self.object_list) 
     context['count'] = self.object_list.count() 

     return context 
+1

merci beaucoup! Comment définir self.location? Mon url stub est: 'url (r'local/(? P [- \ w] +)/$ ', views.Courses_By_Location.as_view(), name =' par_location '),' – max89

+0

J'ai mis à jour mon répondre et ajouté un override 'dispatch' - ceci définira' self.location'. – Matt

+1

Encore merci beaucoup. Ma position générale est classe 'Gen_Location (models.Model): gen_local = models.CharField ('Situation générale', max_length = 200,) display_gen_local = models.CharField ('Emplacement de l'affichage', max_length = 200, def __str __ (self): return self.gen_local' Est-ce que cela signifie que je change le 'location__name__iexact' en' location__charfield__iexact'? Comme il lance une erreur de champ – max89

0

Avez-vous importé le modèle de models.py?

Vous devez importer le modèle par,

from .models import Course 
+0

Silly mon J'ai oublié les modèles de préfixe, il reconnaît maintenant, mais maintenant en jetant l'erreur: "L'objet est de type 'module', mais doit être un modèle Django, Manager ou QuerySet" – max89

+0

Pouvez-vous poster la trace? – zaidfazil

+1

Merci pour votre contribution. J'ai pris l'autre réponse car il a complètement réécrit la vue et cela fonctionne si bien et est très clair. Encore merci d'avoir pris le temps de m'aider. – max89