我一直在使用Python的< code>-Wd参数,发现为了准备升级到Django 2.0,我需要做大量的修改
python -Wd manage.py runserver
主要是< code>on_delete将成为一个必需的参数。
on_delete将是Django 2.0中ForeiniKey的必需参数。如果您想保持当前的默认行为,请在模型和现有迁移中将其设置为models.CASCADE
。
看见https://docs.djangoproject.com/en/1.9/ref/models/fields/#django.db.models.ForeignKey.on_delete
有没有一个简单的正则表达式(或方法)可以用来将< code>on_delete放入我所有的外键中?
我制作了这个可能对你有帮助的 bash 脚本。
#!/bin/bash
FK=()
IFS=$'\n'
count=0
for fk in $(cat $1 | egrep -i --color -o 'models\.ForeignKey\((.*?)');
do
FK[$count]=$fk
#FK+=$fk
count=$(($count + 1))
done
for c in "${FK[@]}";
do
r=`echo "${c}" | sed -e 's/)$/,on_delete=models.CASCADE)/g'`
a="${c}"
sed -i "s/${c}/${r}/g" $1
done
也许您想要一种更“保存”的方法,将 sed -i
更改为 sed -e
并将输出重定向到文件以与原始 models.py 文件进行比较。
编码快乐!!
我不得不这样做,Sayse的解决方案奏效了:
import re
import fileinput
import os, fnmatch
import glob
from pathlib import Path
# https://stackoverflow.com/questions/41571281/easy-way-to-set-on-delete-across-entire-application
# https://stackoverflow.com/questions/11898998/how-can-i-write-a-regex-which-matches-non-greedy
# https://stackoverflow.com/a/4719629/433570
# https://stackoverflow.com/a/2186565/433570
regex = r'(.*?)(ForeignKey|OneToOneField)\(((?:(?!on_delete|ForeignKey|OneToOneField)[^\)])*)\)(.*)'
index = 0
for filename in Path('apps').glob('**/migrations/*.py'):
print(filename)
=> filename = (os.fspath(filename), ) # 3.6 doesn't have this
for line in fileinput.FileInput(filename, inplace=1):
a = re.search(regex, line)
if a:
print('{}{}({}, on_delete=models.CASCADE){}'.format(a.group(1), a.group(2), a.group(3), a.group(4)))
else:
print(line, end='')
你可以用
(ForeignKey|OneToOneField)\(((?:(?!on_delete|ForeignKey|OneToOneField)[^\)])*)\)
这将搜索当前尚未定义删除后会发生什么的所有外键,并且还会忽略您已覆盖ForeignKey的任何地方。
然后,它将捕获括号内的任何内容,允许您将内部文本替换为捕获组加上on_delete
$1($2, on_delete=models.CASCADE)
不建议将全部替换为上述内容,您仍应逐步执行以确保不会产生任何问题(例如任何 pep8 行长警告)
设置应用程序 Nest is built with features from both ES6 and ES7 (decorators, async / await). It means, that the easiest way to start adventure with it is to use Babel or TypeScript. In this tutorial I will u
本文向大家介绍Android编程之退出整个应用程序的方法,包括了Android编程之退出整个应用程序的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程之退出整个应用程序的方法。分享给大家供大家参考,具体如下: 我们在写android应用程序时,经常会遇到想退出当前Acitivity,或者直接退出应用程序.我之前的一般操作是按返回键,或者直接按home键直接返回,其实这
下一个程序用输入流对象 cin 和流读取运算符 >> 取得用户从键盘中输入的两个整,计算这两个值的和,并将结果用 cout 输出。程序及其输出如图 1.6。 // Fig.1.6:fig01_06.cpp // Addition program #include<iostream.h> int main(){ int integer1,integer2,sum; //声明三个变量
你可以查看或更改 Navicat Monitor 的应用程序设置,例如端口、网站网址和 IP 地址。若要配置应用程序设置,请前往“配置”->“应用程序设置”。 这里列出了 Navicat Monitor 的应用程序设置。你可以编辑以下设置: 端口 Navicat Monitor 将侦听的端口号。 网站网址 将用于警报电子邮件内的 Navicat Monitor 网站网址。 IP 地址 如果机器已被
本文向大家介绍js简单设置与使用cookie的方法,包括了js简单设置与使用cookie的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了js简单设置与使用cookie的方法。分享给大家供大家参考,具体如下: 一、js设置cookie的用处 php可以设置cookie的,用js来设置cookie有什么好处呢?在前端进行操作时,有的时候要传很多参数,这个时候,我们可以把这些参数拼接到ur
问题内容: 我已经建立了我的第一个应用程序,我想用密码保护它。将密码存储在Java文件中对我来说很好,并且该方法需要尽可能简单,因为在此应用程序之前我没有Java甚至xml的经验。我尝试了几次但都失败了,所以我希望有人能帮助我。 我使用EditText字段创建了布局: 和一个提交按钮: Java文件: 问题答案: 这部分: 是不正确的。它应该是 当比较基本数据类型(如,,),您可以使用,等 当比较