Групповое объединение в Django

#django #orm #django-views #group-concat

#django #orm #django-представления #объединение групп

Вопрос:

У меня есть модель

 class Project(models.Model):
    project = models.CharField(max_length=255, blank=True, null= True)
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    start_time = models.TimeField()
    end_time = models.TimeField()
    start_date = models.DateField()
  

Это мой запрос для извлечения данных

 qs = Project.objects.values('project').annotate(
    total_hours=Sum((F('end_time') - F('start_time'))), start_date =F('start_date'),).distinct()

    for i in qs:
         print(i)
  

Теперь то, что я получаю, это

 {'project': '1', 'total_hours': Decimal('2.0000'), 'start_date': datetime.date(2020, 8, 1)}
{'project': '3', 'total_hours': Decimal('1.0000'), 'start_date': datetime.date(2020, 8, 1)}
{'project': '1', 'total_hours': Decimal('1.0000'), 'start_date': datetime.date(2020, 8, 2)}
  

Здесь, если проект 1 выходит на разные даты…. Как исключить второе добавление как единый объект

Итак, я пытаюсь использовать GROUP_CONCAT

Это код

 class GROUP_CONCAT(Func):
    function = 'GROUP_CONCAT'
    template = '%(function)s(%(expressions)s)'
    output_field = DateField()
  

Но я не уверен, как я могу использовать это с запросом Django ORM

Комментарии:

1. что произойдет, если вы удалите distinct из конца qs?

2. Я пытаюсь удалить дублирующийся элемент….. Даже если я не передаю distinct, он вернет тот же набор запросов