Подтвердить что ты не робот

Выражения Django F связаны с полем

Итак, я пытаюсь обновить свою модель, выполнив следующее:

FooBar.objects.filter(something=True).update(foobar=F('foo__bar'))

но я получаю следующую ошибку:

FieldError: Joined field references are not permitted in this query

, если это не разрешено с выражением F... как я могу достичь этого обновления?

билет

учитывая информацию в этот билет, теперь я понимаю, что это невозможно и никогда не будет реализовано в django, , но есть любой способ добиться этого обновления?, возможно, с некоторой работой? Я не хочу использовать цикл, потому что существует более 10 миллионов объектов FooBar, поэтому SQL намного быстрее, чем python.

4b9b3361

Ответ 1

Почему бы не использовать raw sql здесь: Основанный на этом, это будет что-то вроде

from django.db import connection

raw_query = '''
update app_foobar set app_foobar.foobar = 
(select app_foo.bar from app_foo where app_foo.id = app_foobar.foo_id) 
where app_foobar.something = 1; 
'''

from django.db import connection
cursor = connection.cursor()
cursor.execute(raw_query)