0

I've got a field in one model like

class Project(models.Model):
    date = fields.DateField(auto_now=False)
    user = models.ManyToManyField(User, related_name="projects", blank=True)
    work_times = models.FloatField(default=1, verbose_name="work times(hours)")

Now, I would like to filter a user's work_times(different value) by a date(same date), the purpose is to warn or remind users when they create new project, because user can't have new project if his projects' work_times >= 8 hours on a day, I already got values as below

[{'work_times': 1.0, 'date': datetime.date(2018, 6, 25)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}, {'work_times': 1.0, 'date': datetime.date(2018, 6, 28)}]

one user has several projects with different work_times on a date, how to filter user A's total work_times on a date in his all projects?

Thanks for your help!

Elsa
  • 1
  • 1
  • 8
  • 27
  • Take a look at this question (but use Sum instead of Count): https://stackoverflow.com/questions/629551/how-to-query-as-group-by-in-django – thebjorn Aug 15 '18 at 08:53

1 Answers1

1

Try to use annotation like this:

from django.db.models import Sum, Q
User.objects.annotate(total_times=Sum('projects__work_times', filter=Q(projects__date=some_date))).filter(total_times__gt=8)
neverwalkaloner
  • 46,181
  • 7
  • 92
  • 100