Scegli tra due date con Django


116

Sto cercando di fare una query che seleziona tra le date con Django.

So come farlo con SQL grezzo abbastanza facilmente, ma come è possibile ottenerlo utilizzando Django ORM?

Qui è dove voglio aggiungere le date comprese tra 30 giorni nella mia query:

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')

Risposte:


230

Usa l' __rangeoperatore:

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

"Created_at" è un campo arbitrario in un modello o è il registro effettivo del database di quando è stato creato il record?
Bigbob556677

@ Philip556677 È un campo arbitrario in un modello. Puoi impostare il parametro auto_now_add di DateField su True per averlo facilmente.
Benbb96


1

due metodi

.filter(created_at__range=[from_date, to_date])

un altro metodo

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte significa maggiore di uguale
  • lte significa minore di uguale

Q Oggetti non è necessario nel secondo metodo, puoi scrivere:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

Se utilizzi a DateTimeField, il filtro con le date non includerà gli elementi dell'ultimo giorno.

Devi lanciare il valore come data:

...filter(created_at__date__range=(start_date, end_date))
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.