带注释的 Django 选择查询
Django Choice Queries with annotate
我卡在了 django 注释查询中。
这是我一直在工作的某个模型。
class Claim(model.Model)
CLAIMS_STATUS_CHOICES = (
(2, PROCESSING),
(1, ACCEPTED),
(0, REJECTED)
)
status = models.CharField(max_length=10,choice=CLAIMS_STATUS_CHOICES)
问题是我不想注释处理选择,但我只想获得接受和拒绝的个人状态计数。
这是我尝试过的。
claim = Claim.objects.filter(Q(status=1) | Q(status=0))
total_status_count = claim.count()
status_counts = Claim.objects.filter(Q(status=1) |Q(status=0)).annotate(count=Count('status')).values('count', 'status')
但是我收到了多个被拒绝和被接受的查询
这就是我得到的 op
[
{
"total_claims": 3,
"status_count": [
{
"status": "1",
"count": 1
},
{
"status": "0",
"count": 1
},
{
"status": "1",
"count": 1
}
]
}
]
我想要的
[
{
"total_claims": 3,
"status_count": [
{
"status": "1",
"count": 2
},
{
"status": "0",
"count": 1
}
]
}
]
对此有任何帮助吗?
Claim.objects.exclude(status=2).values('status').annotate(count=Count('status'))
我在我的项目中做过类似的任务,我必须计算已完成和正在进行的项目总数。就我而言,情况是,每个项目都有一个状态。
在项目模型中,status是一个choice字段,有选项(uploaded, inprogress, inreview, completed)。
我在这里发布查询,也许有人觉得它有用。在 API 中写入以下查询:
from django.db.models import Count, Q
project_counts = Project.objects.filter(user=self.request.user).aggregate(
total=Count('id'),
inprogress=Count('id', Q(status=Project.ProjectStatus.IN_PROGRESS)),
completed=Count('id', Q(status=Project.ProjectStatus.COMPLETED)))
然后 return 这样的响应。
return response.Response({
'total': project_counts['total'] | 0,
'inprogress': project_counts['inprogress'] | 0,
'completed': project_counts['completed'] | 0
})
我卡在了 django 注释查询中。
这是我一直在工作的某个模型。
class Claim(model.Model)
CLAIMS_STATUS_CHOICES = (
(2, PROCESSING),
(1, ACCEPTED),
(0, REJECTED)
)
status = models.CharField(max_length=10,choice=CLAIMS_STATUS_CHOICES)
问题是我不想注释处理选择,但我只想获得接受和拒绝的个人状态计数。 这是我尝试过的。
claim = Claim.objects.filter(Q(status=1) | Q(status=0))
total_status_count = claim.count()
status_counts = Claim.objects.filter(Q(status=1) |Q(status=0)).annotate(count=Count('status')).values('count', 'status')
但是我收到了多个被拒绝和被接受的查询 这就是我得到的 op
[
{
"total_claims": 3,
"status_count": [
{
"status": "1",
"count": 1
},
{
"status": "0",
"count": 1
},
{
"status": "1",
"count": 1
}
]
}
]
我想要的
[
{
"total_claims": 3,
"status_count": [
{
"status": "1",
"count": 2
},
{
"status": "0",
"count": 1
}
]
}
]
对此有任何帮助吗?
Claim.objects.exclude(status=2).values('status').annotate(count=Count('status'))
我在我的项目中做过类似的任务,我必须计算已完成和正在进行的项目总数。就我而言,情况是,每个项目都有一个状态。 在项目模型中,status是一个choice字段,有选项(uploaded, inprogress, inreview, completed)。
我在这里发布查询,也许有人觉得它有用。在 API 中写入以下查询:
from django.db.models import Count, Q
project_counts = Project.objects.filter(user=self.request.user).aggregate(
total=Count('id'),
inprogress=Count('id', Q(status=Project.ProjectStatus.IN_PROGRESS)),
completed=Count('id', Q(status=Project.ProjectStatus.COMPLETED)))
然后 return 这样的响应。
return response.Response({
'total': project_counts['total'] | 0,
'inprogress': project_counts['inprogress'] | 0,
'completed': project_counts['completed'] | 0
})