如何使用单个外键更改两个模型?



所以我有一个模型Part,其中包含ConnectedTo,这是一个models.ForeignKey('self')

这应该以与命名相同的方式运行。如果一个部件连接到另一个部件,则会列出该部件。在处理创建的第一个对象并将对象链接到尚未创建的部件时,会出现我的问题。如果我有一个PartA,那么它与任何对象都没有连接,因为还没有其他对象存在。即使我知道它与尚不存在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.

最新更新