我想从某个模型的相关模型中更改属性,但我不想保存它们,我只是想暂时更改它们。
以这些模型为例:
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
时获得更新的数据。
答案 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)