如何过滤模型并加入用户模型

时间:2019-01-30 10:37:51

标签: django django-models

我有两个模型。第一个是应用User中的accounts模型,另一个是应用Records中的activities模型。我想显示用户列表,其中包含根据date_and_time

上的日期范围过滤的不同操作的活动计数
#models.py file in "activities" app
from acccounts.models import User


class Records(models.Model):
    class Meta:
        verbose_name = "Record"
        verbose_name_plural = "Record"

    activity_choices = (('Solved', 'Solved'), ('Closed', 'Closed'),
                        ('Escalated', 'Escalated'))
    user = models.ForeignKey(
        User, on_delete=models.PROTECT, null=True, blank=True)
    date_and_time = models.DateTimeField(auto_now=True)
    activity = models.CharField(max_length=50)
    url = models.URLField(max_length=255, null=True, blank=True)

我希望某些东西会在我的模板输出中打印出来,例如:

 Name     |   Solved   |   Closed   |   Escalated
----------------------------------------------------
 Hasinoor |        120 |         35 |             9
----------------------------------------------------
 James    |         92 |         32 |            17
----------------------------------------------------

1 个答案:

答案 0 :(得分:0)

您首先需要选择主要要使用的模型,然后使用反向关系注释计数通过Case

User.objects.all().annotate(records_count=Count(Case(
        When(
             records__date_and_time__range=['2011-01-01', '2019-01-01'], 
             then=1
        ),
    output_field=IntegerField(),
)))
进行过滤

要为不同类型的字段创建所需字段可以在批注中使用多个Count,并且要过滤日期和键入When,可以在Q expression中使用Case或多个When表达式。