Tay*_*lor 3 python django django-2.0
我一直在将 Django 项目移植到 Python 3 和 Django 2。我不得不按照 Django 2 的要求将 on_delete 添加到我所有的模型中,并使用外键。现在我已经尝试为这些更改进行迁移TypeError: __init__() missing 1 required positional argument: 'on_delete'。
它引用的文件是 0002 迁移文件,而不是已更新的模型文件。我不知道如何解决这个问题。我曾尝试伪造迁移,但仍然遇到相同的错误。
我不确定为什么它认为数据库不存在,我已经检查过并且一切都完好无损并且在 Postgres 中工作。有任何想法吗?
由于django-2.0 ForeignKey字段 [Django-doc]和OneToOneFieldfields 字段现在有一个必需的on_delete参数。
这在Django-2.0的发行说明中在 2.0 中删除的功能下指定:
该
on_delete参数用于ForeignKey和OneToOneField被现在需要在模型和迁移。考虑压缩迁移,以便更新更少的迁移。
因此,您应该检查迁移文件中的ForeignKeys 和OneToOneFields,并添加一个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')),
],
),
]Run Code Online (Sandbox Code Playgroud)
您应该检查有关on_delete参数的文档,以了解哪种删除策略最适合每种情况。选项是,在写作的时候CASCADE,PROTECT,SET_NULL,SET_DEFAULT,SET(..),DO_NOTHING。
如果您没有on_delete在django-2.0 之前的版本中指定 ,则默认为CASCADE。所以如果你想要相同的行为,你应该添加on_delete=models.CASCADE. 这在1.11 版本的文档中on_delete注明:
1.9 版后已弃用:on_delete 将成为 Django 2.0 中的必需参数。在旧版本中,它默认为
CASCADE.
| 归档时间: |
|
| 查看次数: |
855 次 |
| 最近记录: |