Ошибка "invalid literal for int() with base 10:" при изменении DateTimeField на DateField в models.py | Django
Я хочу показать, сколько постов делается каждый день, поэтому я написал такой код:
class ServerInsightsView(View):
def get(self, request, server_tag):
server = Server.objects.get(tag=server_tag)
post_daily_count =server.posts.all().values('created').annotate(dailycount=Count('created')).order_by() #to get the number of posts each day depending on the DateTimeField
return render(request, 'servers/insights.html', {'server':server, 'post_daily_count': post_daily_count})
Этот код работает, но поскольку created
является DateTimeField
, он группирует данные в зависимости от даты и времени, например (2022, 11, 15, 16, 24, 10, 577648) и (2022, 11, 15, 16, 40, 39, 224605).
находятся в одном и том же дне, но в разных Time
.
поэтому, чтобы исправить это, я изменил DateTimeField
на DateField
:
Вот models.py:
class Post(models.Model):
title = models.CharField(max_length=200)
text = models.TextField(null=True, blank=True)
saved = models.ManyToManyField(User, blank=True, related_name='saves')
upvotes = models.ManyToManyField(User, blank=True, related_name='upvotes')
downvotes = models.ManyToManyField(User, blank=True, related_name='downvotes')
votes_count = models.IntegerField(default=0)
server = models.ForeignKey(Server, on_delete=models.CASCADE, related_name='posts')
creator = models.ForeignKey(User , on_delete=models.CASCADE, related_name='posts', null=True)
created = models.DateField(auto_now_add=True) #was DateTimeField
updated = models.DateField(auto_now=True) #was DateTimeField
и теперь я получаю эту ошибку после этого изменения:
недопустимый литерал для int() с базой 10: b'15 16:24:10.577648'
Аннотация даты и группировка по ней с помощью TruncDate:
from django.db.models.functions import TruncDate
class ServerInsightsView(View):
def get(self, request, server_tag):
server = Server.objects.get(tag=server_tag)
post_daily_count = (
server.posts.all()
.annotate(date=TruncDate('created'))
.values('date')
.annotate(dailycount=Count('date'))
.order_by()
)
return render(
request,
'servers/insights.html',
{'server': server, 'post_daily_count': post_daily_count},
)