2👍
You can use the range
filter to specify a date range (inclusive):
from django.utils import timezone
today = timezone.now().date()
Product.objects.filter(added__range=[today - timezone.timedelta(days=30), today])
1👍
We first need to calculate the previous month. We can for example use relativedelta
[python-doc] from the python-dateutil
package [PyPi]. We can thus install this package with:
pip install python-dateutil
Then we can filter the Product
s such that we get all Product
s that were added after or one prev_month
with prev_month
the datetime
object that is exactly one month ago:
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)
We thus use the __gte
lookup to filter all Product
s with an added
date greater than one month ago.
Note: if you often filter, it might be better to add a
db_index=True
[Django-doc] on youradded
field:class Product(models.Model): # ... added = model.DateTimeField(auto_now_add=True, db_index=True)
- [Django]-PDF links getting stuck while loading in Chrome PDF Viewer
- [Django]-Test failures ("no transaction is active") with Ghost.py
1👍
You can use python datetime and do something like this
import datetime
recently_added_products = Product.objects.filter(date__gte=datetime.date(2019, 7, 1), date__lte=datetime.date(2019, 7, 31))
- [Django]-ImportError: No module named django.core.wsgi (ubuntu)
- [Django]-Django Test Runner can't find tests
- [Django]-How to make multiple django websites share one user database to authenticate?
- [Django]-Implementing MVC pattern with Django Rest Framework
- [Django]-Make celery wait for task to finish
Source:stackexchange.com