更改Django模型关系而不保存它们

时间:2014-07-02 14:29:17

标签: django django-models

我想从某个模型的相关模型中更改属性,但我不想保存它们,我只是想暂时更改它们。

以这些模型为例:

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循环中,它将打印原始名称,而不是我们在第一个for循环中设置的名称。如果你在第一个for循环中save(),它会起作用,但我想暂时改变它们的名字,只是为了这个过程。

是否有人知道这是否可能以某种方式?我在考虑覆盖some_duck.children,但后来我需要自己创建一个RelatedManager对象,这有点奇怪而且很可能是hacky。我希望有更好的方法。

编辑:我希望在some_duck对象上进行更新,以便在您访问some_duck.children时获得更新的数据。

1 个答案:

答案 0 :(得分:0)

如何将子查询集转换为列表?

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

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

for duckling in children:
    print(duckling.name)