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

将 Django 项目移植到 Python 3 和 Django 2 时迁移问题

饶志
2023-03-14

我一直在将Django项目移植到Python 3和Django 2。我不得不按照Django 2中的要求使用外键向所有模型添加on_delete。现在我已经尝试为这些更改进行迁移,得到TypeError:__init__()缺少1个必需的位置参数:“on_delete”

它引用的文件是0002迁移文件,而不是已更新的模型文件。我不知道该如何解决这个问题。我曾经尝试过伪造迁移,但仍然会遇到同样的错误。

我不知道为什么它认为数据库不存在,我已经检查过了,一切都完好无损,并且在Postgres中工作。有什么想法吗?

共有1个答案

亢建木
2023-03-14

由于django-2.0<code>ForeignKey</code>字段[django doc]和<code>OneToOneField</ccode>字段现在有一个必需的<code>on_delete</code>参数。

这在Django-2.0的发行说明中的“2.0中删除的特性”中有详细说明:

模型和迁移中现在需要on_deleteOneToOnefield参数。考虑压缩迁移,以便更新更少的迁移。

因此,您应该检查迁移文件中的ForeiniKeys和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')),
            ],
        ),
    ]

您应该查看有关on_delete参数的文档,以了解哪种删除策略最适合每种情况。在编写CASCADEPROTECTSET_NULLSET_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