我一直在将Django项目移植到Python 3和Django 2。我不得不按照Django 2中的要求使用外键向所有模型添加on_delete。现在我已经尝试为这些更改进行迁移,得到TypeError:__init__()缺少1个必需的位置参数:“on_delete”
。
它引用的文件是0002迁移文件,而不是已更新的模型文件。我不知道该如何解决这个问题。我曾经尝试过伪造迁移,但仍然会遇到同样的错误。
我不知道为什么它认为数据库不存在,我已经检查过了,一切都完好无损,并且在Postgres中工作。有什么想法吗?
由于django-2.0<code>ForeignKey</code>字段[django doc]和<code>OneToOneField</ccode>字段现在有一个必需的<code>on_delete</code>参数。
这在Django-2.0的发行说明中的“2.0中删除的特性”中有详细说明:
模型和迁移中现在需要on_delete
和OneToOnefield
的参数。考虑压缩迁移,以便更新更少的迁移。
因此,您应该检查迁移文件中的
ForeiniKey
s和OneToOnefield
s,并添加一个on_delete
参数,例如:
class Migration(migrations.Migration):
initial = False
dependencies = [
('app', '0001_initial'),
]
operations = [
migrations.CreateModel(
name='Model',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('some_foreignkey', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='app.OtherModel')),
],
),
]
您应该查看有关
on_delete
参数的文档,以了解哪种删除策略最适合每种情况。在编写CASCADE
、PROTECT
、SET_NULL
SET_DEFAULTSET(..)
如果在django-2.0之前的版本中没有指定< code>on_delete
,它会默认为< code>CASCADE。因此,如果您想要相同的行为,您应该添加< code>on_delete=models。级联。这在1.11版本的< code>on_delete文档中有所说明:
自 1.9 版本起弃用:on_delete 将成为 Django 2.0 中的必需参数。在旧版本中,它默认为级联
。
迁移数据库ORM层 迁移模板Blade 迁移分页 迁移验证器 迁移Cache
数据库 模板类 验证器 缓存类
在将带有Django 1.1.11的python2项目移植到Python3.7和Django 2.2.5时,我在依赖项中遇到了错误。 我在python2中使用Django-mobileesp,当我将代码更新到python3时,它会给出UserAgent中间件的错误。 线程django主线程中的异常:回溯(最近一次调用):文件“/usr/lib/python3.7/threading.py”,第91
前言 项目初始化 Composer集成 从ThinkPHP迁移项目 从Laravel迁移项目
问题内容: 由于办公室人员的变动,C#专业知识的水平急剧下降,现在有更多的Java开发人员。至此,高层人士正在考虑将用C#编写的现有.NET项目转移到Java世界中。 除了从头开始完全出现 的明显问题之外,该公司还可以通过哪些可行的方法成功地将项目从.NET C#移植到Java? 问题答案: 这里是要考虑的事情: 这是大项目吗?如果是,请尝试使用C# 这个中型项目是否包含组件?如果否,请尝试使用C