当前位置: 首页 > 知识库问答 >
问题:

如何在django视图中重组数据

祁俊拔
2023-03-14

我有以下属于用户的测量模型:

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(测量对象过滤器(用户=user_id))的数据,同时仍保持 API 格式一致?

共有2个答案

穆德海
2023-03-14

使用这个想法怎么样。。。

    mymeas.append(measurement.__dict__)
太叔昊苍
2023-03-14

希望你能够使用 Django 1.8.在这篇文章中解决的问题学分去那里。

您可以使用按日期分组来筛选查询集:

from django.db.models.expressions import Date

queryset = Measurements.objects.filter(user=user_id).annotate(day=Date('timestamp'), measurements=Count(0)).values('day', 'measurements')
 类似资料:
  • 问题内容: 是否可以在 Django视图中显示PDF文件,而不是使用户必须下载它才能看到它? 如果有可能,将如何做? 这是我到目前为止所拥有的 问题答案: 简而言之,如果你有一个PDF文件,并且想通过Django视图输出它,那么你要做的就是将文件内容转储到响应中并以适当的mimetype发送。 你可能可以直接返回响应而无需指定Content-Disposition,但这可以更好地表明你的意图,并且

  • 我需要将数组中的值替换为。尝试此操作时,仅显示阵列中的第一条记录。 如何显示数组中的所有条目?

  • 问题内容: 我的数据库中有一个视图,某人用一个表中的定义了该视图。我刚刚在该表中添加了新列,并且希望视图反映新列。除了重新执行视图创建脚本之外,还有另一种方法可以重建视图吗?我正在寻找类似于 sp_recompile* 将如何重新编译存储过程的方法(或更准确地说,将其标记为在下次调用时进行编译)。 更新: 从长远来看,我尝试在视图上调用sp_recompile,并且在调用有效的同时,它没有重建视图

  • Django 中的视图是 MTV 架构模式中的 V 层,主要处理客户端的请求并生成响应数据返回。它其实类似于 MVC 架构模式中的 C 层,用于处理项目的业务逻辑部分。Django 的视图函数就是 Django 项目中专门处理对应 path 的 python 函数,这也是整个项目开发中最核心的业务处理部分。当然,在 Django 中处理 path 路径的不只有视图函数(FBV),还有视图类(CBV

  • 问题内容: 我想知道在视图之间传递数据的“最佳”方法是什么。创建不可见字段并使用POST传递它是否更好,还是应该在URL中对其进行编码?还是有更好/更简便的方法? 问题答案: 在视图之间传递数据有多种方法。实际上,这与在两个不同的脚本之间传递数据的问题并没有什么大的不同,当然还引入了一些进程间通信的概念。我想到的一些事情是- GET请求 -第一个请求命中view1->将数据发送到浏览器->浏览器重

  • 问题内容: 我有一个关于如何从模板HTML按钮调用视图函数的问题?像onclick函数一样?这是模板: 而views.py是: 非常感谢你。 问题答案: 一种选择是,你可以使用 像这样: (删除和) 如果你想加载页面的特定部分,而无需重新加载页面-你可以 和一个听众