在整个应用程序中设置 on_delete 的简单方法

Say*_*yse 6 regex django

我一直在使用-WdPython的说法,发现的变化我需要为了准备我升级到2.0的Django

python -Wd manage.py runserver
Run Code Online (Sandbox Code Playgroud)

主要on_delete是由于成为必需的参数。

RemovedInDjango20Warning: on_delete 将是 Django 2.0 中 ForeignKey 的必需参数。models.CASCADE如果您想保持当前的默认行为,请将其设置为on models 和 in existing migrations。

请参阅https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey.on_delete

是否有一个简单的正则表达式(或方法)可以用来放入on_delete我的所有外键?

Say*_*yse 7

小心使用

您可以使用

(ForeignKey|OneToOneField)\(((?:(?!on_delete|ForeignKey|OneToOneField)[^\)])*)\)
Run Code Online (Sandbox Code Playgroud)

这将搜索当前尚未定义删除后会发生什么的所有外键,并且还会忽略您覆盖外键的任何位置。

然后它将捕获括号内的任何内容,这允许您用捕获组和 on_delete 替换内部文本

$1($2, on_delete=models.CASCADE)
Run Code Online (Sandbox Code Playgroud)

不建议将所有内容替换为上述内容,您仍应逐步执行以确保不会产生任何问题(例如任何 pep8 行长度警告)