2014-02-28 3 views
11

Ich versuche, die Abfrage in der BaseDatatableView zu einem Datum, das vom Benutzer in das folgende Format eingegeben wird, zu filtern: MM/TT/JJJJ. Start_date ist also in diesem Format und wird in eine datetime mit strptime konvertiert, siehe unten.Django-Filter Datetime-Basis nur am Datum

Ich möchte es mit genau einem Datum Datetimefield in der db vergleichen, aber ich möchte den Monat, Tag, Jahr genau, ohne Berücksichtigung der Zeit. Das habe ich so, das klappt nicht.

class AppointmentListJson(LoginRequiredMixin, BaseDatatableView): 
      .... 
    start_date = params.get('start_date', '') 
    if start_date: 
     qs = qs.filter(start_date__contains=datetime.strptime(
      start_date, DATE_FORMAT)) 

    return qs 

Dank

Antwort

26

Eine Option (das Datum nach unten in den Filter durchbrechen):

start_date = datetime.strptime(start_date, DATE_FORMAT) 
qs = qs.filter(
    start_date__year=start_date.year, 
    start_date__month=start_date.month, 
    start_date__day=start_date.day 
) 

Eine weitere Option (die Min/Max-Zeit für das Datum und Einsatzbereich eingestellt):

from datetime import datetime 
start_date = datetime.strptime(start_date, DATE_FORMAT) 
start_date_range = (
    # The start_date with the minimum possible time 
    datetime.combine(start_date, datetime.min.time()), 
    # The start_date with the maximum possible time 
    datetime.combine(start_date, datetime.max.time()) 
) 
qs = qs.filter(start_date__range=start_date_range) 
+0

Danke, funktioniert perfekt. –

+3

@JoeLones Großartig! Würde es Ihnen etwas ausmachen [meine Antwort zu akzeptieren] (http://meta.stackoverflow.com/help/someone-answers)? –

+0

Mein schlecht, danke nochmal. –