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)
1条答案
按热度按时间pw9qyyiw1#
create
接受的唯一参数是force_insert
,它与您所请求的内容无关,因此看起来不可能。另外,注意create
执行INSERT ... RETURNING ...
语句,我认为这不可能,因为您无法从其他表返回列。可能最好的方法是您已经建议的方法:然后使用所需的相关字段执行
get()
。