Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么是";关于“U更新”;Django关系字段中不存在选项?_Python_Django_Orm_Foreign Keys - Fatal编程技术网

Python 为什么是";关于“U更新”;Django关系字段中不存在选项?

Python 为什么是";关于“U更新”;Django关系字段中不存在选项?,python,django,orm,foreign-keys,Python,Django,Orm,Foreign Keys,我正在使用Django3.0+MariaDB。 我使用“python manage.py inspectdb>models.py”命令从现有数据库创建了一个models.py。 我现在需要设置外键的选项。 正如您所知,在数据库中,外键可以有多个选项:第一个经典是“ON_DELETE”,第二个是“ON_UPDATE”(您甚至可以在PostgreSQL中有更多选项)。 在Django中,只有一个“on_delete”,但没有“on_update”选项,这让我感到非常惊讶。 我在官方文件上找不到这方面

我正在使用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中呢?

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

on_delete不会在数据库中创建SQL约束。支持 对于数据库级别的级联选项,可以稍后实现

以下功能具有方便的优点,因为您的应用程序可以对
pre\u delete
post\u delete
信号做出反应,但在性能方面也有一些小缺点


关于更新时的

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

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



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

您试图通过on_update实现什么,但如果没有它,您在Django中无法实现。如果您出于任何原因(通常是为了修复错误数据)需要更改id,也可以使用“关于更新“选择权。我的数据库是这样配置的,而且运行得很好。如果没有这个选项,它可能会很费劲,特别是有数百万条输入。我没有什么具体的,我只是想确保如果主键因任何原因被修改,链接的数据会被更新。这就是ON_UPDATE选项的目的。我想我会保持它在数据库中的原样。如果我理解正确,Django ORM将不会访问此选项,这是我想要确定的。