2017-04-04 5 views
0

Mein Problem ist, dass ich alle Ereignisse anzeigen möchte, die zum Beispiel in den Jahren 2016-17, 2017-18, 2018-19 etc, zum Beispiel von 1.07.2016 bis 31.08.2017 sind. Ich benutze Django 1.6.Zeige Ereignisse in einem bestimmten Zeitraum

Als ich URL: http://127.0.0.1:8000/en/production/2016-17 bekam ich einen Fehler: Event matching query does not exist.

Event-Modell:

class Event(models.Model): 
    name = models.CharField('Name', max_length=255) 
    start = models.DateField('Start') 
    end = models.DateField('End') 

    def __unicode__(self): 
     return self.name 

Hier ist meine url:

url(r'^(?P<branch_slug>/production/(?P<year1>[0-9]{4})-(?P<year2>[0-9]{2})$', EventView.as_view()), 

Hier ist meine Ansicht:

class EventListView(ListView): 

    def get_queryset(self): 
     filter_ = {'online': True} 
     season_start = Event.objects.get(start=datetime.date(int(self.kwargs['year1']), 7, 1)) 
     season_end = Event.objects.get(end=datetime.date(int(self.kwargs['year2']), 8, 31)) 
     filter_['start__gte'] = season_start 
     filter_['end__lte'] = season_end 
     return self.model.objects.filter(**filter_) 

Bitte um Hilfe oder einen Hinweis.

+0

season_start (und season_end) ist eine Instanz von Event. Aber Sie verwenden es als Datum. Versuchen Sie 'filter _ ['start__gte'] = season_start.start' (und das selbe am season_end) für die Rückgabe eines Date-Objekts. – Rafael

+0

@Rafael Danke für den Hinweis, aber ich bekomme einen Fehler an dieser Stelle: 'season_start = Event.objects.get (start = datetime.date (int (self.kwarts ['year1']), 7, 1))' – Mark

+0

Entschuldigung . Ihre Datenbank hat also kein Ereignis für das angegebene Datum. (gleicher Fehler [hier] (http://stackoverflow.com/questions/5508888/matching-query-does-not-exist-error-in-django)) – Rafael

Antwort

3

Sie senden das erste Jahr als vierstelligen Parameter, aber die zweite als nur zwei Parameter. Die Datenbank sucht also zwischen 2016 und 2017 nach allem, was nicht zu Ergebnissen führt.

Verwenden Sie entweder volle vierstellige Jahre für den year2-Parameter, oder tun Sie etwas, um die anfängliche "20" zu interpolieren.

Verwandte Themen