django - 在 Django 中动态更改 QuerySet 对象

标签 django django-views

我可以或应该在 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/

相关文章:

Django 如何部分渲染

python - 使用编解码器返回 HTML 时 View 中出现 Django FileNotFoundError

database - South 的回滚应该如何工作?

Django模板条件变量赋值

python - Django - 无法在 HttpResponseRedirect 中传递参数

django - 一个对象不可编写脚本意味着什么?

python - 如何将用户关联到 Django drf 中的发布请求

python - 一个关于POST和GET请求的简单问题

django - 无法将类型整数转换为 uuid

python - Django - 在基于类的 View 上使用 reverse()