Hi everyone,
I have to do a Queryset where i calculate the delta between a DateField() and the date of today. So far, i’ve managed to calculate this delta, with two DateField() of the same model.But when i want to calculate it with the date of today(i tried date.today(), datetime.now().date() and both of them, gave me 0 as a result).
Here is my model
class Marche(models.Model):
titre = models.CharField(max_length=200)
date_entree = models.DateField(auto_now_add=True)
date_1 = models.DateField(null=True, blank=True)
date_2 = models.DateField(null=True, blank=True)
def __str__(self):
return self.titre
Here is the queryset and the output i get when i Calculate the difference between two dates ,that are in my model.(It’s to show you what works). The dates in this exemple are not accurate, it’s just for the test.
from django.db.models import F, ExpressionWrapper, fields
from task3.models import Marche
from django.utils.timezone import timedelta
import datetime
duree = ExpressionWrapper(F('date_2') - F('date_1') , output_field=fields.DurationField())
marche_duration = Marche.objects.annotate(duration=duree)
marche_duration.filter(duration__gt=timedelta(days=2)).values('date_1','date_2','duration')
# Output
<QuerySet [
{'date_1': datetime.date(2021, 4, 22),
'date_livraison': datetime.date(2021, 4, 9),
'duration': datetime.timedelta(13)},
{'date_1': datetime.date(2021, 4, 22),
'date_livraison': datetime.date(2021, 4, 6),
'duration': datetime.timedelta(16)}]>
The goal is to be able to filter entries who have a delta superior to a certain integer.
The issue i’m facing is that when i change date_2 in the ExpressionWrapper, the delta is always equal to 0.
So i hope you can explain to me how to do the same calculation, bust instead of date_2. use the date of today. If you have any questions , i’m okay for it
Thanks in advance