当前位置: 首页 > 知识库问答 >
问题:

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

狄鸿禧
2023-03-14

我一直在使用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放入我所有的外键中?

共有3个答案

阎承嗣
2023-03-14

我制作了这个可能对你有帮助的 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 文件进行比较。

编码快乐!!

郁权
2023-03-14

我不得不这样做,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='')
孔飞翔
2023-03-14

你可以用

(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文件: 问题答案: 这部分: 是不正确的。它应该是 当比较基本数据类型(如,,),您可以使用,等 当比较