django 使用动态列名称进行注释

2024-01-09

我在 django 应用程序中有一个模型,其结构如下:

class items(models.Model):
    name = models.CharField(max_length=50)
    location = models.CharField(max_length=3)

我想为每个名称/项目的每个位置的计数创建一个数据透视表,我设法按照以下方式执行此操作:

queryset_res = items.objects.values('name')\
                            .annotate(NYC=Sum(Case(When(location='NYC', then=1),default=Value('0'),output_field=IntegerField())))\
                            .annotate(LND=Sum(Case(When(location='LND', then=1),default=Value('0'),output_field=IntegerField())))\
                            .annotate(ASM=Sum(Case(When(location='ASM', then=1),default=Value('0'),output_field=IntegerField())))\
                            .annotate(Total=Count('location'))\
                            .values('name', 'NYC', 'LSA','Total')\
                            .order_by('-Total')

这给出了每个名称在每个位置上出现的次数,这一切都可以。

我的问题是如何使位置动态化,因此如果添加了新位置,我就不会再回来更改代码!来自列表或模型数据本身

非常感谢 AB


您可以绑定动态参数*[1, 2, 3], **{'key': 'value'}在Python中。

from django.db.models import Case, Count, Sum, IntegerField, Value, When

def get_annotation(key):
    return {
        key: Sum(
            Case(
                When(location=key, then=Value(1)),
                default=Value(0),
                output_field=IntegerField(),
           ),
        ),
    }

queryset_res = items.objects.values('name')
location_list = ['NYC', 'LSA', 'ASM', ...etc]
for key in location_list:
    queryset_res = queryset_res.annotate(**get_annotation(key))
    
queryset_res = (
    queryset_res.annotate(Total=Count("location"))
    .values("name", "Total", *location_list)
    .order_by("-Total")
)

现在您只需更改即可实现一组查询location_list.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

django 使用动态列名称进行注释 的相关文章

随机推荐

  • 无法在节点和运行时之间转换参数“tx”:解码字段调用时出错

    当我想使用基于基板的链中内置的方法以及自定义类型时 我收到以下错误 2020 04 13 21 03 01 RPC CORE submitAndWatchExtrinsic extrinsic Extrinsic ExtrinsicStat
  • 图 - 具有顶点权重的最短路径

    这是一个消费税 在某些图问题中 顶点可以有权重而不是 或者除了边的权重之外 设 Cv 为顶点的成本 v 和 C x y 边 x y 的成本 这个问题大家关心 寻找图 G 中顶点 a 和 b 之间最便宜的路径 路径的成本是边和顶点的成本之和
  • 使用 ImageDataGenerator 时的 Keras 分割训练测试集

    我有一个目录 其中包含图像的子文件夹 根据标签 我想在 Keras 中使用 ImageDataGenerator 时将这些数据拆分为训练集和测试集 虽然 keras 中的 model fit 有用于指定分割的参数validation spl
  • 一级缓存和二级缓存有什么区别?

    我知道l1和l2缓存是多级缓存中的级别 我想知道每一级缓存放置在哪里 以及允许的最大缓存级别是多少 这两者都取决于CPU 有些CPU根本没有高速缓存 有些CPU在芯片上有L1高速缓存 而L2高速缓存在同一芯片上的单独芯片上 甚至在单独的芯片
  • 如何将图像文件保存在 Postgres 数据库上?

    出于学习目的 我正在使用 Python Flask 创建一个网站 我想从数据库中恢复图像并将其显示在屏幕上 但一步一步来 我首先不知道如何将图像保存在我的数据库中 我的搜索只显示我必须使用bytea输入我的数据库 然后我得到我的图像并以某种
  • 尝试比较两个 csv 文件并将差异写入输出

    我正在开发一个脚本 它获取 2 个 csv 文件之间的差异 并生成一个新的 csv 文件作为具有差异的输出 但前提是两个输入文件之间的相同 2 行 指行号 包含不同的数据 例如文件 1 中的第 3 行有 mike 篮球运动员 文件 2 中的
  • 如何在 Log 中模拟方法 e

    这里 Utils java 是我要测试的类 以下是在 UtilsTest 类中调用的方法 即使我嘲笑 Log e 方法 如下所示 Before public void setUp when Log e any String class an
  • 从 np.fft 计算幅度

    我似乎使用 np fft fft 计算原始波的不正确振幅 显示了 fft 的图 您可以看到显示的幅度约为 3 和 1 5 但如果您查看代码 我将使用幅度 7 和 3 来生成信号 该图应该有两个尖峰 在 x 13 处达到 y 3 在 x 15
  • 浏览器历史记录管理

    我正在尝试找到一种干净的解决方案 以最有效的方式处理浏览器历史记录 我正在使用 GWT 但这个问题确实比这更普遍 这是我的情况 我认为这是相当标准的 我有一个 Web 应用程序 它有几个不同的页面 位置 位置 无论你想怎么称呼它 我会显示这
  • SIP ACK 对话框为空

    我正在使用 JAIN SIP 在 java 中创建 SIP 客户端 我已经成功注册并发送 INVITE 但是当将 ACK 发送回服务器时 我收到错误消息 Cannot Create ACK no remote Target 我检查了 Dia
  • 断言失败:运行时反射宇宙中的不安全符号 DeveloperApi

    我正在 Java 8 程序中运行以下几行 SparkConf sparkConf new SparkConf sparkConf setAppName testJob sparkConf setMaster spark blahblah 7
  • 仅使用一次计时器

    我只想在主窗体初始化后 1 秒使用计时器一次 我以为下面会有一个消息框只显示一次 Hello World 但实际上每秒都会有一个新消息框显示 Hello World 为什么这样 我已经把t Stop 在勾选事件中 另外 我是否需要以某种方式
  • 任务并行库 - 如何立即返回但有一个并行步骤

    我有以下工作流程 需要以非阻塞并行处理方式进行 我想要方法DoStuff 立即返回 所以我正在使用任务并行库 DoStuff Do some setup Parse an Excel file then for each row Fill
  • 随后启动两个 WebClient.UploadStringAsync 调用

    当调用 WebClient UploadStringAsync 两次 而不等待 WebClient UploadStringCompleted 事件时 将引发以下异常 WebClient 不支持并发 I O 操作 显然 这是不支持的 想要启
  • Silverlight 4 BitmapImage - bmp 文件支持

    MSDN 提到了对 PNG 和 JPG 的支持 但许多人正在尝试 setSource file bmp 并抱怨 灾难性失败 有人可以澄清一下 是否支持 bmp 吗 如果没有 在 silverlight 中显示 bmp 的最佳方式是什么 Si
  • 如何在javatechig示例中添加Recycler项目SetOnClickListener

    我正在尝试添加onclick监听器为了这RecyclerView但我尝试了一切 但它不起作用 饲料项目 public class FeedItem private String title private String thumbnail
  • Chrome 中的 Mailto 链接会打开新选项卡

    您好 我的页面上有一个 mailto 链接 该链接在其他浏览器中运行良好 在 Chrome 中 它会打开一个新选项卡 其中 URL 为 mailto 链接 有什么办法可以抑制Web开发人员的行为吗 从我读到的内容来看 这似乎是 chrome
  • 在两个单独的 Angular 应用程序之间进行更改时,AngularJS e2e 测试会挂起

    我有一个令人沮丧的问题 我想为复杂的角度应用程序编写端到端测试 问题是登录屏幕是一个单独的应用程序 最初的想法是 它将根据登录凭据进行分支 以分离我们生态系统中的其他角度应用程序 它就像一个魅力 对于测试来说 这是一场噩梦 测试按预期工作
  • Visual Studio 2015 - ASP.Net 应用程序只有重新启动 Visual Studio 后才会启动

    有时 当我尝试启动 ASP Net 应用程序 调试 时 应用程序将无法启动 Visual Studio 看起来应用程序正在运行 状态栏的颜色变为橙色 浏览器打开并 永远 加载 IIS Express 正在运行 并且该站点显示在 IIS 尝试
  • django 使用动态列名称进行注释

    我在 django 应用程序中有一个模型 其结构如下 class items models Model name models CharField max length 50 location models CharField max le