2014-01-29 3 views
12

Так что я пытаюсь обновить свою модель, выполнив следующие действия:Джанго F выражения объединенное поле

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

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

FieldError: Joined field references are not permitted in this query 

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

билет

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

ответ

5

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

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) 
+1

Вот еще один способ сделать это: "" "UPDATE app_foobar б SET Mycol = foo.othercol ОТ app_foo a ГДЕ a.id = b.foo_id "" ". –

Смежные вопросы