如何在Django create()中使用select_related?

0vvn1miw  于 2023-02-10  发布在  Go
关注(0)|答案(1)|浏览(119)
class Parent(models.Model):
    # some fields

class Child(models.Model):
    parent = models.ForeginKey(Parent)
    species = models.ForeignKey(Species)
    # other fields

我有这样一个函数:

1. def some_function(unique_id):
2.     parent_object = Parent.objects.get(unique_id=unique_id)
3.     new_child = Child.objects.create(name='Joe', parent=parent_object)
4.     call_some_func(new_child.parent.name, new_child.species.name)

在第4行中,为Species生成了一个db查询,有没有办法,我可以使用select_related预取Species,这样就可以避免额外的查询。
当我使用.create()时可以这样做吗?这只是一个例子,我也使用许多其他字段,他们每次都在查询数据库。
我能想到的唯一方法是在第3行之后使用以下代码:

child_obj = Child.objects.select_related('species').get(id=new_child.id)
pw9qyyiw

pw9qyyiw1#

create接受的唯一参数是force_insert,它与您所请求的内容无关,因此看起来不可能。另外,注意create执行INSERT ... RETURNING ...语句,我认为这不可能,因为您无法从其他表返回列。
可能最好的方法是您已经建议的方法:然后使用所需的相关字段执行get()

相关问题