我有一个属于用户的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保持一致的格式?
答案 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__)