【问题标题】:Complex grouping and averages in DjangoDjango中的复杂分组和平均值
【发布时间】:2011-12-06 17:38:10
【问题描述】:

我有一个这样的模型结构:

class Author(models.Model):
   name = models.CharField(max_length=100)
   age = models.IntegerField()

class Book(models.Model):
   published = models.DateTimeField()
   name = models.CharField(max_length=300, unique=True)
   authors = models.ForeignKey(Author)
   category = models.ForeignKey(Category)

class Category(models.Model):
   name = models.CharField(max_length=100)

我想计算每个作者的Books。这很容易,因为我可以做到:Author.objects.values('name').annotate(count=Count('book'))

我在计算这些时遇到了很多困难:

  • 每位作者的唯一类别数。
  • 作者在一个类别中所写书籍的平均数量
  • (这很难。)作者在某个类别中撰写的第一本书和最后一本书之间的平均持续时间。

我不是 ORM 查询专家,如果我必须解决这个问题,我可能最终会使用很多循环和其他迭代来计算这个,但我知道这不是正确的方法.

(我知道这种情况下的某些事情很奇怪,例如对作者姓名的唯一限制,但这是我发现的最好的例子来说明我的问题。)

对我如何实现这一点有任何帮助吗?

谢谢。

【问题讨论】:

    标签: python django django-queryset


    【解决方案1】:

    哎呀,辛苦了。

    由于这些不是您经常需要刷新的信息,我建议您在 Author 模型中添加 3 个字段,然后在 Book 模型上附加一个 post_save 信号:每次创建一本书时,您只需计算这些值并将它们存储在 Author 模型中。

    然后您就可以轻松过滤它们,显示速度非常快,而且在保存时几乎不会注意到计算时间。

    【讨论】:

      猜你喜欢
      • 2016-07-08
      • 2018-11-29
      • 1970-01-01
      • 2016-08-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 2014-01-27
      • 2016-12-09
      相关资源
      最近更新 更多