'count item for monthly wise python DJANGO [duplicate]
I try to make a bar chart and I want value month wise for last 6 months
my models.py
class Btdetail(models.Model):
id = models.IntegerField(primary_key=True)
BatType = models.CharField(max_length=200, default=1)
MaxVolt = models.IntegerField()
DatePurchase = models.DateTimeField(auto_now_add=True)
Manf_ID = models.CharField(max_length=200)
here is my view.py, this count all item of last six months but I want month wise data for last six months
def index_view(request):
months_before = 5
now = datetime.utcnow()
from_datetime = now - relativedelta(months=months_before)
modified_from_datetime = from_datetime.replace(day=1, hour=0, minute=0, second=0, microsecond=0)
month_count = Btdetail.objects.filter(DatePurchase__gte=modified_from_datetime).count()
return render(request, "index.html", {'month_count': month_count})
Solution 1:[1]
finally I solved this by myself and get data monthly wise, "any_variable6" mean the month before 6 month from the current month and so on
and you can also get idea how to get data from previous specific month
from datetime import datetime
from dateutil.relativedelta import relativedelta
def index_view(request, x=0, y=0):
now = datetime.now()
month6 = now - relativedelta(months=5)
modified6 = month6.replace(day=1)
month5 = now - relativedelta(months=4)
modified5 = month5.replace(day=1)
month4 = now - relativedelta(months=3)
modified4 = month4.replace(day=1)
month3 = now - relativedelta(months=2)
modified3 = month3.replace(day=1)
month2 = now - relativedelta(months=1)
modified2 = month2.replace(day=1)
month1 = now - relativedelta(months=0)
modified1 = month1.replace(day=1)
mon6 = Btdetail.objects.filter(DatePur__range=[modified6, modified5]).count()
mon5 = Btdetail.objects.filter(DatePur__range=[modified5, modified4]).count()
mon4 = Btdetail.objects.filter(DatePur__range=[modified4, modified3]).count()
mon3 = Btdetail.objects.filter(DatePur__range=[modified3, modified2]).count()
mon2 = Btdetail.objects.filter(DatePur__range=[modified2, modified1]).count()
mon1 = Btdetail.objects.filter(DatePur__range=[modified1, now]).count()
context = {
'mon6': mon6,
'mon5': mon5,
'mon4': mon4,
'mon3': mon3,
'mon2': mon2,
'mon1': mon1
}
return render(request, "index.html", context)
Solution 2:[2]
view.py
month_count = Btdetail.objects.filter(DatePurchase__gte=modified_from_datetime)
index.html
{{month_count.count}}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | Rana Talha |
Solution 2 | md Zayed |