如何同时获取Parent对象实例并创建关联的Child对象?
问题解答
原方案的可行性
原方案完全可行,逻辑简单清晰,适合需要在创建Child前对Parent实例做额外操作的场景,但它会触发两次数据库请求:一次查询Parent实例,一次插入Child数据,在性能敏感的场景下有优化空间。
能否一步完成创建?当然可以,两种优化方式:
直接使用外键ID关联(最常用)
Django的ForeignKey字段会自动在数据库中生成字段名_id的列,我们不需要先获取Parent实例,直接传入Parent的ID即可:Child.objects.create(parent_id=id)这样只需要一次数据库插入操作,省去了查询Parent的步骤,性能更优。
若Parent尚未创建,可同时创建两者
如果你的场景是需要新建一个Parent,同时创建关联的Child,可以合并为两次写入操作(无需额外查询):parent = Parent.objects.create() Child.objects.create(parent=parent)这里虽然还是两步,但都是写入操作,比先查询不存在的Parent再创建更合理。
总结
原方案没问题,但如果不需要用到Parent实例的其他属性或方法,优先用parent_id直接传ID的方式,能减少一次数据库查询,提升效率。
内容的提问来源于stack exchange,提问作者atropa belladona
相关产品推荐
相关产品推荐

