Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django admin:如何处理非托管表中损坏的外键?_Django - Fatal编程技术网

django admin:如何处理非托管表中损坏的外键?

django admin:如何处理非托管表中损坏的外键?,django,Django,我有一个非托管模型,如下所示: Foo类(models.Model): parent=models.ForeignKey('Foo',on_delete=models.SET_DEFAULT,DEFAULT=0) name=models.CharField(最大长度=128) 类元: 托管=错误 db_表='foo' 以前的开发人员决定做一件奇怪的事情:添加parent\u id字段,该字段可以是现有Foorow/instance的id,也可以是0(而不仅仅是使字段为空)Foo不存在 当我试图

我有一个非托管模型,如下所示:

Foo类(models.Model):
parent=models.ForeignKey('Foo',on_delete=models.SET_DEFAULT,DEFAULT=0)
name=models.CharField(最大长度=128)
类元:
托管=错误
db_表='foo'
以前的开发人员决定做一件奇怪的事情:添加
parent\u id
字段,该字段可以是现有
Foo
row/instance的id,也可以是0(而不仅仅是使字段为空)Foo不存在

当我试图在管理面板中显示此模型时,django没有抱怨:

@admin.register(Foo)
类FooAdmin(admin.ModelAdmin):
列表显示=('id','name','parent')
django所做的只是跳过父id=0的
foo
。如果在
列表显示中没有
父对象
,则将显示所有对象。 当我运行类似于
Foo.objects.filter(parent\u id=0)
的程序时,它返回0个对象,但我确信数据库中有很多对象
Foo.objects.all()
将只返回具有非零父ID的对象

那么,我应该如何处理这样的情况(除了进行数据库迁移,这可能会破坏现有前端,而现有前端与django无关,但与现有数据库有关)

或者至少如何使模型管理器返回所有对象,而不仅仅是具有非零父id的
Foo
实例

首先,我想到的是使用另一个模型字段,并在每次需要时手动检索父字段(通过属性或其他方式):


还有其他想法吗?

在shell中,您可以
打印(Foo.objects.all()).query
?令人惊讶的是,它跳过了parent\u id为0的实例。查询很好,没有异常:
从'genre'中选择'genre`.'id`、'genre`.'parent\u id`、'genre`.'name`
。使用
.select_related()
一切都是一样的。在任何情况下,我都会尝试通过迁移修复您的数据。让前端团队检查影响(如果有)。
parent_id = models.IntegerField(default=0)