“QuerySet”对象在“bulk_update”中没有属性“pk”

2024-03-17

我有教授的模型,需要“批量更新”。我必须在数据库的 2 个请求中完成此操作。 但我有例外(“QuerySet”对象没有属性“pk”)。如果我使用 get 我有另一个异常(get() 返回了不止一位教授)。

我的模特。

 class Professor(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    age = models.IntegerField(default=18)
    class Meta:
        indexes = [models.Index(fields=['first_name'])]

My code

def update_professor_first_names(first_name_updates: List[NameUpdate]):
    prof_id = [id for id, name in first_name_updates]
    prof = Professor.objects.filter(id__in=prof_id)
    tmp = []
    for prof_id, new_first_name in first_name_updates:
        prof.first_name = new_first_name
        tmp.append(prof)
    Professor.objects.bulk_update(tmp, ['first_name'])

你能给我一些建议吗?


Your prof is a QuerySet of Professors,没有一个Professor,因此这样写是没有意义的prof.first_name = new_first_name,这也会导致tmp成为一个list一样的QuerySet重复多次。

你应该查一下Professor对象,并相应地分配它,所以:

def update_professor_first_names(first_name_updates: List[NameUpdate]):
    prof_id = [id for id, name in first_name_updates]
    profs = {p.id: p for p in Professor.objects.filter(id__in=prof_id)}
    tmp = []
    for prof_id, new_first_name in first_name_updates:
        prof = profs[prof_id]
        prof.first_name = new_first_name
        tmp.append(prof)
    Professor.objects.bulk_update(tmp, ['first_name'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“QuerySet”对象在“bulk_update”中没有属性“pk” 的相关文章

随机推荐

  • 表单外的复选框

    由于设计要求 我需要在表单外部放置几个复选框 是否仍然可以将这些值包含在表单的提交操作中 也许用javascript或其他我没有想到的方式 如果您使用 HTML5 则有一个form属性 请参见以下示例 p p
  • 如何使用 web3.js 1.0 进行身份验证和发送合约方法

    我对如何使用 web3 1 0 库执行合约的方法感到困惑 此代码有效 只要我先手动解锁帐户 var contract new web3 eth Contract contractJson contractAddress contract m
  • 使用回车符迭代文件

    有没有办法使用语法迭代文本文件 with open filename r as f for line in f print f 如果文件仅包含回车符而没有换行符 到目前为止我能做的就是 with open filename r as f f
  • 我所有的 javascript 在底部添加了一些代码

    我的网站使用 CodeIgniter 今天我发现我的网站在所有 JavaScript 文件 包括 jQuery 文件 的底部添加了一些代码 代码是这样的 4fd970 You are blocked by day limit 4fd970
  • 无法签入 TFS 的更改

    我在尝试签入对 Visual Studio Online 上托管的 TFS 的更改时遇到问题 上周才开始 我在跑步Visual Studio Professional 2017版本15 5 2 当我尝试签入更改时 出现以下错误 C My W
  • 将属性绑定到列表视图数据模板内的元素

    我无法让数据绑定在DataTemplate以 Xamarin 形式 我可以让它与ListView 即绑定RowHeight 但一旦进入DataTemplate 将内容设置为我的 ViewModel 的属性没有任何影响 在下面的示例中 如果我
  • Sqlite计算查询中YYYYMMDD日期格式之间的天数差异

    我已经以 YYYYMMDD 格式存储了一些患者记录的治疗日期 tdate 和接收日期 rdate 我想查询rdate tdate结果小于30的记录 我的尝试是 SELECT FROM table WHERE rdate tdate lt 3
  • Matlab:获取图中点击的坐标但保留按钮回调

    我需要一个函数 它可以为我提供在图形窗口中单击的坐标以及单击的鼠标按钮 左 中 右或按下 KEY 的坐标 但我仍然想使用 uicontrol 按钮 我目前正在使用 ginput 它工作正常 但按钮回调函数没有执行 因此我认为 ginput
  • 将日期字符串转换为 Unix 时间戳

    我的日期是 Mon Mar 15 20 51 18 0000 2010 如何将此日期转换为 Unix 时间戳 require time Time parse Mon Mar 15 20 51 18 0000 2010 to i
  • 从 intellij 检查中排除目录,但不从自动完成中排除

    据我所知 排除目录的唯一方法是将其标记为在项目结构中排除 然而 这将使 IntelliJ 完全忽略该目录 因此它不会出现在自动完成选项中 我不想要这个 我希望排除在检查之外 但包含在其他一切中 这可能吗 我正在使用 Intellij 12
  • MySQL InnoDB - 对事务感到困惑

    我已经使用MySQL很多年了 但是没有太多使用InnoDB引擎的经验 我现在正在对它运行一些测试 因为我将要使用它 并且从我读到的内容来看 如果该事务中的任何查询存在任何问题 它不应该允许任何内容 通过 我的问题是 为什么在下面的代码中 当
  • java zoneinfo 有什么问题?

    我的 Mageia 4 中有欧洲 莫斯科时区 代码是这样的 System out println new java util Date System out println System getProperty user timezone
  • 系统日期格式不使用django语言环境

    尝试了解 Django 中的 L10N 实现 这是我的设置 LANGUAGE CODE fr FR USE L10N True If I try gt gt gt datetime datetime strptime 2012 05 30
  • 通过 API 使用回形针保存文件

    我使用回形针来管理上传 通过 Fog 支持到 S3 效果很好 我正在尝试从电子邮件中取出附件并通过回形针保存它们 使用相同的模型等 电子邮件由外部服务解析并发布到我的应用程序 包括附件 我收到的文件本身很好 但我不知道如何使用回形针保存它
  • 高级错误处理:系统地尝试一系列处理程序

    另一个后续行动this https stackoverflow com questions 15295004 disregarding simple warnings errors in trycatch noredirect 1 comm
  • 通过 Google Apps 帐户发送电子邮件可以在本地运行,但不能在我的网络服务器上运行

    Related 通过 Google Apps 帐户通过 C 发送电子邮件 https stackoverflow com questions 757987 send email via c through google apps accou
  • AngularJS - 为什么选择下拉菜单没有 $event 变化

    我是 AngularJS 的新手 我有一个问题 为什么ng change 事件没有通过 HTML div div
  • 从 codeigniter 发送多封电子邮件

    嗨 朋友们 我正在 codeigniter 中创建新闻通讯 有没有办法使用 CI 电子邮件库发送多封电子邮件 还是应该使用第三方 使用电子邮件类 例如 foreach list as name gt address this gt emai
  • Oracle - 如何获取索引字段等信息

    如何列出 Oracle 中定义的索引列 如何在 select 语句中使用这些索引 就像是 SELECT x y z FROM a WITH INDEX x 如何列出 Oracle 中定义的索引列 SELECT FROM all ind co
  • “QuerySet”对象在“bulk_update”中没有属性“pk”

    我有教授的模型 需要 批量更新 我必须在数据库的 2 个请求中完成此操作 但我有例外 QuerySet 对象没有属性 pk 如果我使用 get 我有另一个异常 get 返回了不止一位教授 我的模特 class Professor model