【问题标题】:Django query expression for counting particular attendance用于计算特定出勤率的 Django 查询表达式
【发布时间】:2020-06-12 07:01:41
【问题描述】:

我有一个包含 1000 行的字段。在这些行中有 2 个状态可用。在场与不在场。我想知道是否有一个查询表达式来计算出勤字段中存在或缺席的学生总数,以便我可以将答案存储在相应的字段中(出勤字段已填充“存在”和“缺席”)。

class StudentInClass(models.Model):
    Attendance = models.CharField(max_length=20, default='None')
    Total_Present = models.IntegerField
    Total_Absent = models.IntegerField

我可以使用这些命令,但这些并不是我真正想要的。如果对此有表达式查询,请告诉我。

present_count = StudentInClass.objects.filter(Attendance__contains='Present').count 
absent_count = StudentInClass.objects.filter(Attendance__contains='Absent').count

【问题讨论】:

标签: python django django-models query-expressions


【解决方案1】:

或许你可以使用简单的group by

from django.db.models import Count

StudentInClass.objects.values('Attendance').annotate(count=Count('Attendance'))

【讨论】:

    【解决方案2】:

    您正在寻找过滤方法。我也会选择 BooleanField 而不是 IntegerField。然后过滤它们并计数。

    class StudentInClass(models.Model):
        attendance = models.CharField(max_length=20, default='None')
        total_present = models.BooleanField(default=False)
        total_absent = models.BooleanField(default=False,null=True)
    
    student_count = StudentIntClass.objects.filter(total_present==True).count()
    

    类似的。

    【讨论】:

    • 我对字段类型没有发言权,因为我正在处理从 csv 给出的数据,否则布尔值将是理想的选择。
    【解决方案3】:

    类似下面的东西应该可以工作(未经测试)。

    from django.db.models.aggregates import Sum
    StudentInClass.objects.aggregate(sum_present=Sum("Total_Present"), sum_absent=Sum("Total_Absent"))
    

    【讨论】:

    • 嘿,我认为你的想法有误。我只是编辑我的问题。请重新阅读。
    【解决方案4】:

    我可以使用这些命令,但这些并不是我真正想要的。如果对此有表达式查询,请告诉我。

    present_count = StudentInClass.objects.filter(Attendance__contains='Present').count 缺席计数 = StudentInClass.objects.filter(Attendance__contains='缺席').count

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-27
      • 2018-08-01
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多