我可以或应该在 View 中这样做吗?
a = SomeTable.objects.all()
for r in a:
if r.some_column == 'foo':
r.some_column = 'bar'
它像冠军一样工作,但我在其他地方尝试了类似的事情,但得到了奇怪的结果,这意味着 QuerySet 对象不喜欢被人玩弄。而且,我在文档中没有看到任何关于这种技巧的好坏。
我知道还有其他方法可以做到这一点,但我特别想知道这是否是一个坏主意,为什么它是坏的,如果它确实是坏的,什么是“最好的”最 django/pythonic 改变值的方法苍蝇会。
最佳答案
这很好,只要您稍后不做任何会导致重新评估查询集的事情 - 例如,切片。这将对数据库进行另一次查询,并且所有修改过的对象都将被替换为新的对象。
一种保护自己免受这种情况的方法是首先转换为列表:
a = list(SomeTable.objects.all())
这样,进一步切片等不会导致新的 db 调用,并且任何修改都将被保留。
关于django - 在 Django 中动态更改 QuerySet 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9712905/