python - 在 django 应用程序代码建议中使用信号
问题描述
大家好,我想根据我的模型制作每个国家/地区发送的 mail_items 数量的图表,在我的模型中,您将看到 Country_origin
我的想法是我想做另一个模型,它有 2 列“ country ”和“ mail_items_count ”,然后我想在新项目保存到“ mail_items ”时发出信号,信号将更新“ country+mail_items_count ”增加“ mail_items_count ”一个,
我还想创建一个函数来汇总“ mail_item_count ”列中的所有计数。
在我的views.py中,我想制作一个查询所有国家及其比例的视图:(我必须制作一个字典,我必须循环抛出查询中的每个对象,并将国家名称作为字典中的键,并将计数器(整数)除以 sum 函数的输出来计算每个国家/地区的比率,并附加到字典中...以发送所有国家和比率字典的响应)
模型.py
class mail_items(models.Model):
mail_item_fid = models.OneToOneField(Mail_item_Event,on_delete=models.CASCADE)
Event_code = models.OneToOneField(Mail_item_Event,on_delete=models.CASCADE,related_name="mail_item_event_cd")
office_Evt_cd = models.ForeignKey(Office,on_delete=models.CASCADE, related_name='office_Ev')
Date_Evt = models.DateTimeField()
Country_origine = models.ForeignKey(Pays, on_delete=models.CASCADE ,related_name='paysOrigine')
Country_destination = models.ForeignKey(Pays,on_delete=models.CASCADE,related_name='paysDestination')
Expediteur = models.ForeignKey(Client,on_delete=models.CASCADE,related_name='expedi')
Destinateur = models.ForeignKey(Client,on_delete=models.CASCADE,related_name='destin')
对不起,如果它这么长....
我仍然是初学者,甚至搜索了很多我无法做到这一点,你能帮我编写这部分代码还是给我发送可以帮助我编写代码的链接?
解决方案
使用注释您可以在不创建额外模型的情况下做到这一点。它还将减少实现信号的开销
您可以直接在这样的视图中执行此操作,以获取所有国家/地区的计数:
from django.db.models import Count
countries = Pays.objects.annotate(num_emails=Count('paysOrigine'))
#example result
print(countries[0].num_emails)
或者,如果您不需要一次全部计数,您可以将属性添加到 Pays 模型:
class Pays(models.Model):
...
@property
def email_count(self):
return self.paysOrigine_set.all().count()
推荐阅读
- libgdx - 如何将武器附在玩家手上并实现动态瞄准?
- python-3.x - psycopg2 - 编码“UTF8”在编码“LATIN1”时没有等效项,即使设置了client_encoding
- blazor - Blazor 格式化 Numeric 的 InputType
- sql - 如何将日期插入游标内的 TempTable?
- spring - 升级:spring 框架 5.2.X
- swift - 如何在 React Native swift 模块中呈现本机 UIViewController
- sql - 计算给定ID的char出现次数
- color-scheme - 如何添加偏好颜色方案媒体查询
- mysql - MySQL 大量磁盘活动,即使没有运行查询
- reactjs - react-admin中有两个字段的自动完成输入?