Escolha entre duas datas com Django


116

Estou procurando fazer uma consulta que seleciona entre datas com Django.

Eu sei como fazer isso com SQL bruto com bastante facilidade, mas como isso poderia ser feito usando o Django ORM?

É aqui que desejo adicionar as datas entre 30 dias na minha consulta:

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

Respostas:


230

Use o __rangeoperador:

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

O "created_at" é um campo arbitrário em um modelo ou este é o registro real do banco de dados de quando o registro foi criado?
Bigbob556677

@ Philip556677 É um campo arbitrário em um modelo. Você pode definir o parâmetro auto_now_add do DateField como True para ter isso facilmente.
Benbb96


1

dois métodos

.filter(created_at__range=[from_date, to_date])

outro método

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte significa maior que igual
  • lte significa menos do que igual

Objetos Q são desnecessários no segundo método, você pode escrever:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

Se você estiver usando um DateTimeField , a filtragem com datas não incluirá itens do último dia.

Você precisa converter o valor como data:

...filter(created_at__date__range=(start_date, end_date))
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.