在使用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)
关于如何清除参考字段的任何想法?我搜索了文档,但没有找到它。
提前致谢
答案 0 :(得分:2)
为什么你在这里使用F()
? F
实际上是在查询中使用,您希望在同一模型中获取具有与某个属性有某种关系的对象。一旦你有了这个对象,就没有必要使用它了 - 你可以用标准的Python来做:
rank.ammountMatchesRanked += 1
rank.save()
评论后编辑不,您误解了什么是延迟加载。它适用于查询集中的实例(即数据库行),而不适用于实例中的字段(即列)。所以一旦你完全访问了一个实例,Django默认会加载它的所有字段(除了那些标有defer()
的字段),所以上面的内容不会产生额外的查询。
在您链接的更新中使用F()
的文档说明只有在您没有对该对象执行任何其他操作时才会这样做。你是,所以这不是优化。
答案 1 :(得分:1)
我在django中并不是那么好,但是这样做:
rank.ammountMatchesRanked = F('ammountMatchesRanked');
在第二次通话之前?