377 Stimmen

Wie filtere ich Abfrageobjekte nach Datumsbereich in Django?

Ich habe ein Feld in einem Modell wie:

class Sample(models.Model):
    date = fields.DateField(auto_now=False)

Nun muss ich die Objekte nach einem Datumsbereich filtern.

Wie kann ich alle Objekte filtern, die ein Datum zwischen 1-Jan-2011 y 31-Jan-2011 ?

6voto

saran3h Punkte 10035

Um es flexibler zu gestalten, können Sie ein FilterBackend wie unten dargestellt entwerfen:

class AnalyticsFilterBackend(generic_filters.BaseFilterBackend):
    def filter_queryset(self, request, queryset, view):
        predicate = request.query_params # or request.data for POST

        if predicate.get('from_date', None) is not None and predicate.get('to_date', None) is not None:
            queryset = queryset.filter(your_date__range=(predicate['from_date'], predicate['to_date']))

        if predicate.get('from_date', None) is not None and predicate.get('to_date', None) is None:
            queryset = queryset.filter(your_date__gte=predicate['from_date'])

        if predicate.get('to_date', None) is not None and predicate.get('from_date', None) is None:
            queryset = queryset.filter(your_date__lte=predicate['to_date'])
        return queryset

0voto

Jonhatan Fajardo Punkte 349

ist einfach,

YourModel.objects.filter(YOUR_DATE_FIELD__date=timezone.now())

Funktioniert bei mir

0voto

Insookwa Punkte 79

Modell

date = models.DateField()

Siehe

def get_queryset(self):  

    fromDate = self.request.query_params.get('fromDate',None)
    toDate = self.request.query_params.get('toDate',None)
    response  = yourModel.objects.filter(date__gte=fromDate,date__lte=toDate)
    return response

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X