簡體   English   中英

Django 帶有注釋的選擇查詢

[英]Django Choice Queries with annotate

我被困在 django 注釋查詢中。

這里是某些 Model 我一直在工作。

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')

但是我收到了多個被拒絕和接受的查詢,這就是我得到的結果

 [
        {
            "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'))

我在我的項目中完成了類似的任務,我必須在其中計算已完成和正在進行的項目總數。 就我而言,情況是,每個項目都有一個狀態。 在項目model中,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 response.Response({
        'total': project_counts['total'] | 0,
        'inprogress': project_counts['inprogress'] | 0,
        'completed': project_counts['completed'] | 0
    })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM