Django查询集。使用一个查询注释不同的字段

达斯汀·森

我向数据库写入了3个查询,以获取不同的值。我需要将这些查询合并为一个查询。

    # Counting Total Number of Plans by Day
    Day.objects.annotate(num_of_plans=Count('plan')) \
        .values('num_of_plans', 'date', 'id')

    # Counting is_completed=True Plans by Day
             Day.objects \
            .filter(plan__is_completed=True) \
            .annotate(num_of_completed_plans=Count('plan__is_completed')) \
            .values('num_of_completed_plans', 'id', 'date')


     # Counting status=deferred Plans by Day
       Day.objects \
            .filter(plan__status='deferred') \
            .annotate(num_of_deferred_plans=Count('plan__is_completed')) \
            .values('num_of_deferred_plans', 'id', 'date')

如您所见,上面有3个查询。我需要以某种方式优化此代码并借助一个查询获取值

楷模

class Day(models.Model):
    date = models.DateField(default=datetime.date.today, unique=True)

class Plan(models.Model):
    title = models.CharField(max_length=255)
    status = models.CharField(max_length=255, choices=PLAN_STATUSES, null=True, default='upcoming')
    is_completed = models.BooleanField(default=False, null=True)

    day = models.ForeignKey(Day, CASCADE, null=True)

有什么方法可以优化3个查询并通过一个查询获取值?

威廉·范昂塞姆

,您可以表达式中使用filter=…参数[Django-doc]Count至于对的过滤Bool,您可以只使用Sum表达式[Django-doc]

from django.db.models import Count, Q, Sum

Day.objects.annotate(
    num_of_plans=Count('plan'),
    num_of_completed_plans=Sum('plan__is_completed'),
    num_of_deferred_plans=Count('plan', filter=Q(plan__status='deferred'))
)

通常,最好不要使用.values()但是要利用这些对象(具有额外的属性),因为这样您就可以完整地保留在模型上定义的逻辑。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从具有一个不同字段的后向外键关系中获取 django 查询集

来自分类Dev

Django-查询:使用相关模型字段注释查询集

来自分类Dev

Python/Django - 如何使用由另一个查询确定的值来注释 QuerySet

来自分类Dev

Django从另一个查询集中排除一个查询集

来自分类Dev

Django从另一个查询集中排除一个查询集

来自分类Dev

Django DetailView查询集返回一个空列表

来自分类Dev

Django 在查询集中添加一个字段

来自分类Dev

Django查询集优化-防止选择带注释的字段

来自分类Dev

使用多个字段对带有计数的Django查询集进行注释

来自分类Dev

使用django-filter对多个字段进行查询,每个查询都有一个自定义方法

来自分类Dev

使用一个更新查询设置多个字段

来自分类Dev

Django REST Framework:使用组合过滤器从另一个查询集中排除一个查询集

来自分类Dev

在一个查询中使用内部联接和不同

来自分类Dev

使用 Scala 从不同平台的一个平台查询

来自分类Dev

在三个不同的结果集而不是一个结果集中查询结果

来自分类Dev

Django Arrayfiled:使用arryafield中的第一项注释查询集

来自分类Dev

查询上一个查询的结果集

来自分类Dev

在一个查询中显示来自同一数据集的不同值

来自分类Dev

用字段值注释查询集

来自分类Dev

Django使用ForeignKey在查询中检索一个属性

来自分类Dev

使用先前查询结果中的字段在mongodb中的另一个查询中

来自分类Dev

在一个查询中查询不同的EntitySubclasses

来自分类Dev

使用一个选择查询代替查询+子查询

来自分类Dev

如何从查询中的一个字段获取信息以在另一个查询中使用?

来自分类Dev

按顺序在不同字段上按顺序存储一个范围查询

来自分类Dev

Mongodb:使用字段值查询,但还查询另一个未知的唯一字段

来自分类Dev

MyBatis:在一个查询中通过注释收集

来自分类Dev

SQL Server:插入一个复杂的选择查询,其中一个字段是不同的

来自分类Dev

如何使用具有来自不同查询集的值的 Modelchoice 字段创建 Django 表单/表单集

Related 相关文章

  1. 1

    从具有一个不同字段的后向外键关系中获取 django 查询集

  2. 2

    Django-查询:使用相关模型字段注释查询集

  3. 3

    Python/Django - 如何使用由另一个查询确定的值来注释 QuerySet

  4. 4

    Django从另一个查询集中排除一个查询集

  5. 5

    Django从另一个查询集中排除一个查询集

  6. 6

    Django DetailView查询集返回一个空列表

  7. 7

    Django 在查询集中添加一个字段

  8. 8

    Django查询集优化-防止选择带注释的字段

  9. 9

    使用多个字段对带有计数的Django查询集进行注释

  10. 10

    使用django-filter对多个字段进行查询,每个查询都有一个自定义方法

  11. 11

    使用一个更新查询设置多个字段

  12. 12

    Django REST Framework:使用组合过滤器从另一个查询集中排除一个查询集

  13. 13

    在一个查询中使用内部联接和不同

  14. 14

    使用 Scala 从不同平台的一个平台查询

  15. 15

    在三个不同的结果集而不是一个结果集中查询结果

  16. 16

    Django Arrayfiled:使用arryafield中的第一项注释查询集

  17. 17

    查询上一个查询的结果集

  18. 18

    在一个查询中显示来自同一数据集的不同值

  19. 19

    用字段值注释查询集

  20. 20

    Django使用ForeignKey在查询中检索一个属性

  21. 21

    使用先前查询结果中的字段在mongodb中的另一个查询中

  22. 22

    在一个查询中查询不同的EntitySubclasses

  23. 23

    使用一个选择查询代替查询+子查询

  24. 24

    如何从查询中的一个字段获取信息以在另一个查询中使用?

  25. 25

    按顺序在不同字段上按顺序存储一个范围查询

  26. 26

    Mongodb:使用字段值查询,但还查询另一个未知的唯一字段

  27. 27

    MyBatis:在一个查询中通过注释收集

  28. 28

    SQL Server:插入一个复杂的选择查询,其中一个字段是不同的

  29. 29

    如何使用具有来自不同查询集的值的 Modelchoice 字段创建 Django 表单/表单集

热门标签

归档