是否忽略django迁移的无效外部文件?

是否忽略django迁移的无效外部文件?,django,foreign-keys,migration,Django,Foreign Keys,Migration,我正在将一个应用程序从旧的DB系统迁移到django。我已经导入了一堆遗留数据。我使用脚本将旧系统中的表模式转换为Django模型,因为它有很多表。然后,我使用另一个脚本将旧db的内容写入Django fixture,然后导入。所有工作正常,数据在视图中提供等 但是,我现在注意到旧系统中的一些ForeignKey没有正确地标识为FK,只是作为Char/Int字段放入djando模型中。因此,我将一个字段从IntegerField更新为ForeignKey,但作为遗留数据,我遇到了以下问题: dj

我正在将一个应用程序从旧的DB系统迁移到django。我已经导入了一堆遗留数据。我使用脚本将旧系统中的表模式转换为Django模型,因为它有很多表。然后,我使用另一个脚本将旧db的内容写入Django fixture,然后导入。所有工作正常,数据在视图中提供等

但是,我现在注意到旧系统中的一些ForeignKey没有正确地标识为FK,只是作为Char/Int字段放入djando模型中。因此,我将一个字段从IntegerField更新为ForeignKey,但作为遗留数据,我遇到了以下问题:

django.db.utils.IntegrityError: The row in table 'pickings_detpick' with primary key '17170' has an invalid foreign key: pickings_detpick.fk_ent_id contains a value '30223' that does not have a corresponding value in pickings_entpick.id.
因此,基本上,有许多(不确定有多少)外键引用指向源数据中实际上不存在的对象(无论出于何种原因,我不太了解hold系统)


有没有一种方法可以让Django忽略它们&将它们设置为null或其他什么?或者我真的必须梳理数据并修复它们吗?

不是一个长期的修复方法,而是在一个狭窄的问题上,让ForeignKey字段的constraint slide属性起作用(将其设置为False)


在生产环境中这不是一个好主意,底层数据仍然需要修复。

在数据库中自己使用一些查询(不要使用Django)这样做最简单。编写一些将执行左/右连接的SQL,并使用where子句选择引用对象不存在的行,并根据您的首选项将这些行设置为null/delete。无需手动梳理数据SQL非常强大:)我可以做到。如果可能的话,我仍然倾向于在django这样做。我的第二个选项是为装置编写脚本以找到它们并将它们设置为null(因为我将在FK字段中允许null=True)。我的最后一个选择是直接在sql中执行。IMO django是一种sql/db抽象。除非绝对必要,否则就没有必要深入到那个层次——就像我不会在编写web服务时弄乱http协议的内部一样……是的,ORM是用来抽象SQL操作的。但是如果您对Django有一定的经验,您就会知道在Django中使用ORM不可能(很容易)实现任意连接。事实上,这是一个一次性修复,您必须为它编写一个查询,这并不难。如果坚持使用Django执行此操作,则必须对数据库执行多个查询,并使用python执行连接(最好使用您的脚本选项,而不是此选项)。与编写简单的查询相比,这是非常低效的。@AbdulAzizBarkat是的,我知道有些事情不容易用Django完成。数据结构没有那么复杂,所以FK、mtm就足够了。我只是不想在另一方面提出sql查询,因为项目的其他地方不需要它,而且我已经有了一个处理相同数据的管道。