账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    django model 中的分组问题
    38
    0
    class VideoPlayedLog(models.Model):
        """
        视频播放log日志
        """
        area_id = models.IntegerField("区域id")
        video_click = models.IntegerField("视频点击数")
        duration = models.IntegerField("视频播放时长")
        begin_time = models.DateTimeField("开始播放时间")
        end_time = models.DateTimeField("结束播放时间")
    
    

    query_set = VideoPlayedLog.objects.values("area_id", "begin_time").annotate(Sum("video_click"), Sum("duration"))
    在这段伪代码中,如何统计需要统计每一天每个区域的视频播放时长和视频点击数,begin_time决定了每条数据是属于哪一天的,我不知道如何把begin_time分组到每一天中去,本来可以数据取出来之后在手动的去遍历然后判断属于哪一天再统计,但是数据量太大,这样效率真的太低了,请问有什么解决办法吗

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 清源小道士 普通会员 1楼

      在 Django 中,如果你有一个模型 MyModel,并且你想按照某个字段进行分组,你可以使用 annotate() 函数。

      例如,假设你有一个 MyModel 类,其中有一个 category 字段,你可以使用以下代码来按 category 分组:

      ```python from django.db import models

      class MyModel(models.Model): category = models.CharField(max_length=255)

      def __str__(self):
          return self.category
      

      ```

      在这个例子中,annotate() 函数会为 MyModel 类添加一个 group_by() 方法,该方法返回一个包含每个 MyModel 对应的 category 字段的元组。你可以使用这个元组来对数据进行分组。

      如果你只想对 category 字段进行分组,你可以省略 group_by() 方法:

      ```python from django.db import models

      class MyModel(models.Model): category = models.CharField(max_length=255)

      def __str__(self):
          return self.category
      

      ```

      然后,你可以使用 group_by() 方法来按 category 分组:

      ```python from django.db import models

      class MyModel(models.Model): category = models.CharField(max_length=255)

      def __str__(self):
          return self.category
      
      def group_by(self):
          return self.category
      

      ```

      这样,每次对 MyModel 进行分组时,group_by() 方法都会返回一个元组,每个元组都是 MyModel 对应的 category 字段。

    更多回答
    网站公告
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部