我有以下模型,它有關于客戶Leads的所有細節。客戶希望看到他的Leads的跟進狀態。
class FollowUp(models.Model)。
CALL_CHOICES = [("0", "Call Unanswered")。
("1", "Call Later"),
("2", "已安排訪問")。
("3", "未訪問") 。
("4", "無法到達")。
("5", "錯誤的號碼")。
("6", "不感興趣")。
("7", "交易結束")]
status = models.CharField(_("呼叫狀態")。
max_length = 20,
choices = CALL_CHOICES,
默認= '1')
)
next_action_on = DateTimeField(_("Next Action"), auto_now_add=False,
null=True, blank=True)
reminder = models.BooleanField(_("reminder"/span>), default=False)
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
class Lead(models.Model)。
followups = models.ManyToManyField(FollowUp, verbose_name=_("Follow up"/span>), blank=True)
...
我怎樣才能得到每個狀態選擇的Lead計數。例如
{
'Call Unanswered': 12 #Leads,
'Call Later': 10 #Leads
'訪問預定': 20, #Leads,
...
}
uj5u.com熱心網友回復:
試一下:
Lead.objects.aggregation(
**{
choice[1]。數目(
'followups', filter=Q(followups__status=choice[0] )
) for choice in Followup.CALL_CHOICES
}
)
這將回傳類似于:
{'Call Unanswered'/span>: 0,
'Call Later': 0,
'已安排訪問': 0,
'未訪問過': 0,
'無法到達': 0,
'打錯電話': 0,
'不感興趣': 0,
'Deal Closed': 0}。
uj5u.com熱心網友回復:
你會得到這樣的計數:
>>> Leads.objects.filter(follow_up__status=0).count()
>>> 10
uj5u.com熱心網友回復:
我認為你可以使用for迭代器來迭代CALL_CHOICES,并根據狀態來過濾行。
queryset = Leads.objects.all()
res = {}
for i in FollowUp.CALL_CHOICES:
res[i[1]] = queryset.filter(status=i[0] )。 aggregate( follows__total=Count('status'))['total']
print(res)
在腳本的最后,你將得到每一對值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/323513.html
標籤:
