Django ile iki tarih arasından seçim yapın


116

Django ile tarihler arasında seçim yapan bir sorgu yapmak istiyorum.

Bunu ham SQL ile oldukça kolay bir şekilde nasıl yapacağımı biliyorum, ancak bu Django ORM kullanılarak nasıl sağlanabilir?

Sorguma 30 gün arasındaki tarihleri ​​eklemek istediğim yer burası:

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

Yanıtlar:


230

__rangeOperatörü kullanın :

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

"Oluşturulan_at" bir modelde rastgele bir alan mı yoksa bu, kaydın oluşturulduğu zamanın veritabanlarının gerçek günlüğü mü?
Bigbob556677

@ Philip556677 Bu, bir modelde keyfi bir alandır. Kolayca sahip olmak için DateField'ın auto_now_add parametresini True olarak ayarlayabilirsiniz .
Benbb96


1

iki yöntem

.filter(created_at__range=[from_date, to_date])

diğer yöntem

.filter(Q(created_at__gte=from_date)&Q(created_at__lte=to_date))
  • gte eşitten büyük anlamına gelir
  • lte eşitten küçük demektir

İkinci yöntemde Q Nesneleri gereksizdir, şunları yazabilirsiniz:.filter(created_at__gte=from_date, created_at__lte=to_date)
CarMoreno

0

Bir kullanıyorsanız DateTimeField, tarihlerle Filtreleme son gündeki öğeleri içermez.

Değeri tarih olarak atmanız gerekir:

...filter(created_at__date__range=(start_date, end_date))
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.