I have the following model for a Measurement belonging to a user:
class Measurement(models.Model):
user = models.ForeignKey(User, related_name='measurements')
timestamp = models.DateTimeField(default=timezone.now, db_index=True)
def get_date(self):
return self.timestamp.date()
And for one of my views I need the measurements grouped by day. I have done the following:
def group_measurements_by_days(user_id):
measurements = Measurement.objects.filter(user=user_id)
daysd = {}
for measurement in measurements:
day = measurement.get_date()
if not day in daysd:
daysd[day] = []
mymeas = daysd[day]
mymeas.append(measurement)
days = [{'day': day, 'measurements': measurements} for day, measurements in daysd.items()]
days = sorted(days, key=itemgetter('day'), reverse=True)
return days
So that I get a list like:
[
{ 'day': date1, 'measurements': [ Measurement, Measurement, ...]},
{ 'day': date2, 'measurements': [ Measurement, Measurement, ...]},
...
]
But this is completely wrong, because I have a mixture of plain python types and django ORM types. This works when I use this data in templates, but is giving me trouble in other areas.
For example, when trying to reuse this code for a django rest api, I suddenly am unable to serialize those objects.
How can I process the data coming from the django ORM (Measurement.objects.filter(user=user_id)
), but still keep a consistent format for my API?