Wählen Sie mit Django zwischen zwei Daten


116

Ich möchte eine Abfrage machen, die zwischen Daten mit Django auswählt.

Ich weiß, wie man das mit Raw SQL ziemlich einfach macht, aber wie kann dies mit dem Django ORM erreicht werden?

Hier möchte ich die Daten zwischen 30 Tagen in meine Abfrage einfügen:

start_date = datetime.datetime.now() + datetime.timedelta(-30)
context[self.varname] = self.model._default_manager.filter(
    current_issue__isnull=True
    ).live().order_by('-created_at')

Antworten:


230

Verwenden Sie den __rangeOperator:

...filter(current_issue__isnull=True, created_at__range=(start_date, end_date))

Ist das "created_at" ein beliebiges Feld in einem Modell oder ist dies das tatsächliche Protokoll der Datenbank, als der Datensatz erstellt wurde?
Bigbob556677

@ Philip556677 Es ist ein beliebiges Feld in einem Modell. Sie können den Parameter auto_now_add von DateField auf True setzen, um ihn einfach zu haben.
Benbb96


1

zwei Methoden

.filter(created_at__range=[from_date, to_date])

eine andere Methode

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte bedeutet größer als gleich
  • lte bedeutet weniger als gleich

Q Objekte sind in der zweiten Methode nicht .filter(created_at__gte=from_date, created_at__lte=to_date)
erforderlich.

0

Wenn Sie a verwenden DateTimeField, werden beim Filtern mit Datumsangaben keine Elemente am letzten Tag berücksichtigt.

Sie müssen den Wert als Datum umwandeln:

...filter(created_at__date__range=(start_date, end_date))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.