Django - 如何从字段中删除F()?

时间:2009-12-26 21:24:31

标签: django expression

在使用F()进行查询后(请参阅http://docs.djangoproject.com/en/dev/topics/db/queries/#query-expressions),我保存了对象,但之后,我需要再次保存它。我想从字段中删除F()。如果我不这样做,F()会再次被调用。

例如

rank.ammountMatchesRanked = F('ammountMatchesRanked') + 1
rank.save() # does ammountMatchesRanked = ammountMatchesRanked + 1
... # Manipulating more rank fields (can't manipulate before)
rank.save() # does ammountMatchesRanked++ again (undesired)

关于如何清除参考字段的任何想法?我搜索了文档,但没有找到它。

提前致谢

2 个答案:

答案 0 :(得分:2)

为什么你在这里使用F()F实际上是在查询中使用,您希望在同一模型中获取具有与某个属性有某种关系的对象。一旦你有了这个对象,就没有必要使用它了 - 你可以用标准的Python来做:

rank.ammountMatchesRanked += 1
rank.save()

评论后编辑不,您误解了什么是延迟加载。它适用于查询集中的实例(即数据库行),而不适用于实例中的字段(即列)。所以一旦你完全访问了一个实例,Django默认会加载它的所有字段(除了那些标有defer()的字段),所以上面的内容不会产生额外的查询。

在您链接的更新中使用F()的文档说明只有在您没有对该对象执行任何其他操作时才会这样做。你是,所以这不是优化。

答案 1 :(得分:1)

我在django中并不是那么好,但是这样做:

rank.ammountMatchesRanked = F('ammountMatchesRanked');

在第二次通话之前?