kos*_*r22 9 python django python-3.x django-2.1
我正在尝试将Django项目从迁移Python 2.7/Django 1.11到Python 3.7/Django 2.1。
我对一个问题有些困惑。
Django 2.1将models.ForeignKey(...)项目中的所有代码字符串标记为错误:
TypeError: __init__() missing 1 required positional argument: 'on_delete'
这是因为因为Django 2.x,所以'on_delete'方法是ForeignKey字段的必需项(尝试在带有条目的子表之后添加父表时,获取TypeError:__init __()缺少1个必需的位置参数:'on_delete')
如果您将阅读这篇文章,则解决方案非常简单,您只需添加以下'on_delete'选项之一,例如:
    models.ForeignKey(...,  on_delete=models.CASCADE,)
但是,Django不仅抱怨实际'models.py'文件,而且抱怨所有(!)迁移,其中包括"ForeignKey"添加或更改的字段。
所以我的问题是,在中修改旧的迁移文件是否安全Django?在这种情况下我该怎么办?
将您的代码更新为 Django 2
(.*)models.ForeignKey\((((?!on_delete).)*)\)\)
$1models.ForeignKey($2, on_delete=models.CASCADE))
field=models.ForeignKey\((((?!on_delete).)*)\)
field=models.ForeignKey($1, on_delete=models.CASCADE)
(.*)models.OneToOneField\((((?!on_delete).)*)\)\)
$1models.OneToOneField($2, on_delete=models.CASCADE))
您可以使用这 3 个正则表达式通过搜索和替换功能更新您的代码库。当然,通过检查每个替换来逐步完成,但是使用正则表达式可以节省您的时间。
| 归档时间: | 
 | 
| 查看次数: | 805 次 | 
| 最近记录: |