通过子查询设置一个django对象属性
Set a django object property through a subquery
我有一个 Foo
类型的对象,外键指向 Bar
。 Bar
有一个名为 slug
的 属性。
我能做到
myfoo.bar = Bar.objects.get(slug='123')
但这会增加一个额外的查询。是否可以让 Django 在更新中将分配生成为子查询?
即生成 SQL 类似于:
UPDATE myfoo SET bar_id = (select id from bar where slug = '123')
您可以使用 Django Subquery 表达式:
from django.db.models import Subquery
# create the "SELECT id FROM bar WHERE slug = '123' LIMIT 1" subquery
subquery = Bar.objects.filter(slug='123')[:1]
# update only the correct foo object with this subquery
Foo.objects.filter(pk=myfoo.pk).update(bar=Subquery(subquery))
# refresh the variable so that `myfoo.bar` is correct
myfoo.refresh_from_db()
我有一个 Foo
类型的对象,外键指向 Bar
。 Bar
有一个名为 slug
的 属性。
我能做到
myfoo.bar = Bar.objects.get(slug='123')
但这会增加一个额外的查询。是否可以让 Django 在更新中将分配生成为子查询?
即生成 SQL 类似于:
UPDATE myfoo SET bar_id = (select id from bar where slug = '123')
您可以使用 Django Subquery 表达式:
from django.db.models import Subquery
# create the "SELECT id FROM bar WHERE slug = '123' LIMIT 1" subquery
subquery = Bar.objects.filter(slug='123')[:1]
# update only the correct foo object with this subquery
Foo.objects.filter(pk=myfoo.pk).update(bar=Subquery(subquery))
# refresh the variable so that `myfoo.bar` is correct
myfoo.refresh_from_db()