为什么Django关系字段中不存在“on_update”选项?

2024-05-13 08:39:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Django3.0+MariaDB。 我使用“python manage.py inspectdb>;models.py”命令从现有数据库创建了一个models.py。 我现在需要设置外键的选项。 正如您所知,在数据库中,外键可以有多个选项:第一个经典是“ON_DELETE”,第二个是“ON_UPDATE”(您甚至可以在PostgreSQL中有更多选项)。 在Django中,只有一个“on_delete”,但没有“on_update”选项,这让我感到非常惊讶。 我在官方文件上找不到这方面的信息。 无论是在一些老帖子上还是在同一个问题上,回复都不是结论性的,主要集中在“on_delete”上。 我问的是“更新”选项,没有别的。 那么,这个选项在哪里,或者为什么它没有出现在Django的ORM中


Tags: djangopy命令gt数据库manageonmodels
1条回答
网友
1楼 · 发布于 2024-05-13 08:39:31

Django实际上并不使用数据库级联选项,即使对于on_delete

on_delete doesn’t create an SQL constraint in the database. Support for database-level cascade options may be implemented later.

由于你的应用程序可以对pre_deletepost_delete信号做出反应,因此以下方法有一些方便的优点,但在性能方面也有一些轻微的缺点


关于ON_UPDATE

它没有实现,而且很少使用,因为通常您永远不会更改模型id

如果您需要在数据库级别上进行特定的操作,或者在应用程序级别上对其进行模拟,以实现更好的控制(例如重写模型保存方法),则仍然可以创建SQL迁移


关于与外键无关的其他数据库约束,有一些文档与它们相关here并且特定于postgreSQL here

相关问题 更多 >