61
Just an update. In Django >= 1.8 it is possible to do:
from django.db.models import F, ExpressionWrapper, fields
duration = ExpressionWrapper(F('date_end') - F('date_start'), output_field=fields.DurationField())
events_with_duration = Event.objects.annotate(duration=duration)
after which you can run queries like:
events_with_duration.filter(duration__gt=timedelta(days=10))
1
You’ll need to create a queryset with the extra method to add the date difference to each row
Then use the aggregate method to compute the average for your just added column:
Be careful though, this method is slow and won’t scale. Storing the computed value on event_type is imho your best option.
- [Django]-Using django-admin on windows powershell
- [Django]-PHP Frameworks (CodeIgniter, Yii, CakePHP) vs. Django
- [Django]-Sending post data from angularjs to django as JSON and not as raw content
0
I think your best bet is to create an SQL view with the date_end - date_start
column, create a django model on this view and then you will be able to query the view and annotate it as you want. I’ve done this with models similars to yours and maybe I could extract some interesting code for you if you need.
- [Django]-In django, how do I sort a model on a field and then get the last item?
- [Django]-Django: For Loop to Iterate Form Fields
- [Django]-Nginx doesn't serve static
Source:stackexchange.com