django orm

2019-01-24 18:11:23 +08:00
 kingofvir

django orm 更新 model 某个字段为该 model 中某个外键 mode 字段的值。

2522 次点击
所在节点    Django
5 条回复
kingofvir
2019-01-24 18:16:12 +08:00
有 model A,model B,A.b = ForeignKey(B), 如优雅地设置 A.author = A.b.name.
kingofvir
2019-01-25 09:24:08 +08:00
自顶
mayorbryant
2019-01-25 10:07:50 +08:00
难道 A.author = A.b.name 就不优雅了吗
kingofvir
2019-01-28 10:05:29 +08:00
@mayorbryant 主要是为了数据更新,这样几万条数据更新需要执行几万个 sql
banxi1988
2019-02-17 22:15:00 +08:00
根据我的理解给出一个使用纯 SQL 的解法,你可以自行翻译成 Django ORM 的写法
针对如下表结构:

```sql
CREATE TABLE `author` (
`id` INTEGER,
`name` TEXT,
PRIMARY KEY(`id`)
);


CREATE TABLE `book` (
`id` INTEGER,
`name` TEXT NOT NULL,
`author_id` INTEGER,
`author_name` TEXT,
PRIMARY KEY(`id`)
);

````

`book.author_name` 是后面加的,要填充其关联的 author 的名称可以使用如下 SQL 语句更新。

```sql
update book set author_name = (select name from author where id = author_id)
```
经过我使用 SQLite 测试是 OK 的。
> Query executed successfully: update book set author_name = (select name from author where id = author_id) (took 0ms, 3 rows affected)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/530321

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX