在这里,我该如何过滤过去一个月内到此日期添加的所有产品。
models.py
class Product(models.Model):
name = models.CharField(max_length=250)
description = models.TextField(blank=True)
featured = models.BooleanField(default=False)
added = model.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
views.py
def all_products(request):
all_products = Product.objects.all()
recently_added_products = Product.objects.filter(...)
context = {'all_products':all_products,'recent_products':recent_products}
return render(request,'products_list.html',context)
答案 0 :(得分:2)
您可以使用range
过滤器指定日期范围(包括日期):
from django.utils import timezone
today = timezone.now().date()
Product.objects.filter(added__range=[today - timezone.timedelta(days=30), today])
答案 1 :(得分:1)
我们首先需要计算上个月。例如,我们可以使用relativedelta
[python-doc]中的python-dateutil
package [PyPi]。因此,我们可以通过以下方式安装该软件包:
pip install python-dateutil
然后,我们可以过滤Product
,这样我们就可以使用Product
prev_month
对象将所有prev_month
添加到一个datetime
之后或一个from dateutil.relativedelta import relativedelta
from django.utils.timezone import now
def all_products(request):
all_products = Product.objects.all()
prev_month = now() - relativedelta(months=1)
recently_added_products = Product.objects.filter(added__gte=prev_month)
context = {'all_products':all_products,'recent_products':recent_products}
return render(request,'products_list.html',context)
就在一个月前:
Product
因此,我们使用__gte
lookup过滤所有added
日期大于一个月前的added
。
注意:如果您经常过滤,最好在class Product(models.Model): # ... added = model.DateTimeField(auto_now_add=True, db_index=True)
字段上添加db_index=True
[Django-doc]:@angular-devkit/build-angular
答案 2 :(得分:1)
您可以使用python datetime并执行类似的操作
import datetime
recently_added_products = Product.objects.filter(date__gte=datetime.date(2019, 7, 1), date__lte=datetime.date(2019, 7, 31))