2014-07-02 3 views
1

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

Возьмем, например, эти модели:

class Duck(models.Model): 
    name = models.StringField() 

class Duckling(models.Model): 
    name = models.StringField() 
    parent = models.ForeignKey(Duck, related_name='children') 

Теперь предположим, есть некоторые данные в базе данных, то при попытке это:

for duckling in some_duck.children.all(): 
    duckling.name = 'test-to-change-name' 

for duckling in some_duck.children.all(): 
    print(duckling.name) 

Во второй цикл будет печататься оригинал имена, а не имена, которые мы задали в первом цикле for. Если бы вы были save() их в первом цикле for, это сработало бы, но я хочу временно изменить их имена, только для этого процесса.

У кого-нибудь есть идея, если это возможно? Я думал о переписывании some_duck.children, но тогда мне нужно было бы создать объект RelatedManager, который является довольно странным и, вероятно, взломанным. Надеюсь, что есть лучшие способы.

Редактировать: Я хочу, чтобы он обновлялся на объекте some_duck, так что, когда вы получаете доступ к some_duck.children, вы получаете обновленные данные там.

ответ

0

Как насчет преобразования набора запросов для детей в список?

children = list(some_duck.children.all()) 

for duckling in children: 
    duckling.name = 'test-to-change-name' 

for duckling in children: 
    print(duckling.name) 
+0

Да, это было бы, конечно, работать, но когда вы получите доступ к нему из объекта 'some_duck', вы все равно получите тот же результат. Извините, это требование, я обновлю вопрос. – rednaw

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