2015-05-27 2 views
0

У меня есть 3 модели:Массовое обновление для родственных моделей

class Model1: 
    ... 

class Model2: 
    ... 
    m1 = ForeignKey(Model1) 
    var2 = .... 

class Model3: 
    ... 
    m2 = ForeignKey(Model2) 
    var3 

И я пытаюсь обновить Model3:

Model1.objects.get(...).model2_set.filter(....).update(... How to update all model3_set__var3? ....???) 
+0

Мне нужен пример запроса, чтобы дать хороший ответ. Однако, как подсказка: вы хотите обновить 'Model3', поэтому попросите' Model3 'и подумайте наоборот:' Model3.objects.filter (m2 __..., m2__m1 __...). Update (...) '. – dhke

ответ

2

Вы можете использовать отношения:

Model3.objects.filter(m2__m2var=1, m2__m1__m1val=1).update(...) 

__ используется для отношений, и вы можете использовать внешние ключевые соединения для объединения таблиц, так что вы можете выбирать поля на Model2 по m2__<m2_field> и поля фильтра на Model1 с m2__m1__<m1_field>

Read the related docs

0

Вы можете попробовать:

Model3.objects.filter(model1__id=x).update(var3=y) 

Я хотел бы ожидать Django автоматически заботится об отношениях, хотя я не тестировал это на втором уровне отношений.

Более подробно о том, что на Django documentation: Lookups that span relationships

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