所以我有一个模型Part
,其中包含ConnectedTo
,这是一个models.ForeignKey('self')
。
这应该以与命名相同的方式运行。如果一个部件连接到另一个部件,则会列出该部件。在处理创建的第一个对象并将对象链接到尚未创建的部件时,会出现我的问题。如果我有一个Part
A
,那么它与任何对象都没有连接,因为还没有其他对象存在。即使我知道它与尚不存在B
有关。我可以创建B
并在创建时将其引用到另一部分,但这不会更改A
中的ConnectedTo
值。
每当添加某些内容时,我都可以轻松地编写一些东西来更改,但是这个系统旨在变得相当大规模,我觉得在它失控之前,我需要一个更自动化的解决方案。
如果我理解正确,您的问题是,如果外键不存在,则无法创建实例。
作为解决方案,您可以先创建最深的部分,然后在上去创建另一个部分时创建另一个部分。就像你有链子一样A -> B -> C
c = Part.objects.create()
b = Part.objects.create(connected_to=c)
a = Part.objects.create(connected_to=b)
另一种解决方案是为父实例设置None
,直到创建新的子实例。如果您需要在孩子之前创建它。使用post_save
或保存方法,您可以执行以下操作:
b = Part.objects.create()
c = Part.objects.create()
在post_save
上,您可以制作:
parts = Part.objects.filter(id=b.id)
parts.update(connected_to=c)
# I didn't use save method here in order to to call post_save again.