У меня есть модель, которая выглядит следующим образом (некоторые нерелевантные поля были опущены):
class Note(models.Model):
enterprise_id = models.IntegerField(db_index=True)
field_id = models.IntegerField()
activity = models.TextField(choices=ACTIVITY_CHOICES)
user_date = models.DateTimeField()
Я хотел бы (в терминах SQL) сгруппировать по комбинации (enterprise_id, field_id, активность, год user_date), а затем для каждой группы перечислить user_dates из Notes, которые вошли в нее. Следующий набор запросов работает, но список array_agg в конечном итоге представляет собой строку типа [datetime.datetime(2017,1,1,0,0,0),...]
или аналогичную, которая не очень легко разбирается.
Есть ли способ, которым я могу ArrayAgg
метку времени unix из поля user_date
, а не сам объект datetime? Или, если это не так, ArrayAgg
кортеж (год, месяц, день), чтобы его можно было проанализировать?
qs = self.get_queryset()\
.annotate(year=ExtractYear('user_date'))\
.values('activity', 'enterprise_id', 'field_id', 'year')\
.order_by('activity', 'enterprise_id', 'field_id', 'year') \
.annotate(dates=ArrayAgg('user_date'))