django - 如何使用单个外键更改两个模型?
问题描述
所以我有一个Part
包含的模型ConnectedTo
,它是一个 models.ForeignKey('self')
.
这应该以与命名所暗示的方式相同的方式起作用。如果一个部件连接到另一个部件,它会被列出。当处理创建的第一个对象并将对象链接到尚未创建的部分时,我的问题就出现了。如果我有一个Part
A
,那么它什么都没有连接,因为还没有其他对象存在。即使我知道它与B
尚不存在的连接。当我创建它时,我可以创建它并将其引用到另一部分,B
但这并不能改变ConnectedTo
.A
每当添加一些东西时,我都可以轻松地编写一些东西来改变,但是这个系统被设计成相当大的规模,我觉得我需要一个更自动化的解决方案,以免它失控。
解决方案
如果我理解你的话,你的问题是,如果它的外键不存在,你就不能创建一个实例。
作为一种解决方案,您可以先创建最深的部分,然后再创建另一个。就像你有链一样A -> B -> C
c = Part.objects.create()
b = Part.objects.create(connected_to=c)
a = Part.objects.create(connected_to=b)
另一种解决方案是None
为父实例设置,直到创建新的子实例。如果您需要在孩子之前创建它。使用post_save
或使用 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.
推荐阅读
- streaming - 使用 h.264 编码流式传输图像
- c - Windows 命名管道客户端上的 uv_start_read 等待服务器关闭其管道并导致 EOF
- c# - 如何将文本保留在控制台顶部?
- python-3.x - 使用 hdfs3 连接到 HDFS 时出现 WinError 126 错误
- sql - 选择与两个日期之间最长期间相关的所有数据
- pyspark - 如果路径不存在 Pyspark 时 PipelineModel.load(PATH) 的错误处理
- java - 将 CSV 数据源从 java 程序传递到报表的表
- android - Android Camera2:如何实现半自动快门速度优先模式
- javascript - 将 javascript 变量值传递给表单内的输入类型隐藏值
- c# - 尽管有 IAppBuilder.MapSignalR(),但未找到信号器/信号器/集线器