如何在django视图中重新组织数据

时间:2015-10-13 19:00:57

标签: python django django-rest-framework

我有一个属于用户的Measurement的以下模型:

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()

对于我的一个观点,我需要按天分组测量。我做了以下事情:

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

这样我得到的列表如下:

[
  { 'day': date1, 'measurements': [ Measurement, Measurement, ...]},
  { 'day': date2, 'measurements': [ Measurement, Measurement, ...]},  
  ...
]

但这是完全错误的,因为我混合了普通的python类型和django ORM类型。这在我在模板中使用这些数据时有效,但在其他方面给我带来了麻烦。

例如,当尝试将此代码重用于django rest api时,我突然无法序列化这些对象。

如何处理来自django ORM(Measurement.objects.filter(user=user_id))的数据,但仍为我的API保持一致的格式?

2 个答案:

答案 0 :(得分:0)

希望您能够使用Django 1.8。这个post学分解决了问题。

您可以使用按日期分组来过滤查询集:

from django.db.models.expressions import Date

queryset = Measurements.objects.filter(user=user_id).annotate(day=Date('timestamp'), measurements=Count(0)).values('day', 'measurements')

答案 1 :(得分:0)

如何使用this idea ...

    mymeas.append(measurement.__dict__)