更新并保存django.db.models.query.QuerySet对象中的记录?

时间:2014-04-23 03:21:32

标签: django set models

在django中处理模型对象时请考虑以下事项:

>>> x = table.objects.all()
>>> x[0].coulomb1
'hello'
>>>
>>> x[0].coulomb1 = 'goodbye'
>>>
>>> x[0].coulomb1
'hello'

请您帮我理解如何更改此值并保存?

提前致谢:)

编辑: 我通过以下方式进行了管理:

>>> x
[<table: table object>]
>>> y = x[0]
>>> y
<table: table object>
>>> y.coulomb1 = 'goodbye'
>>> y.coulomb1
'goodbye'
>>> y.save()
>>>
>>> x[0].coulomb1
'goodbye'

如果有人可以解释为什么它在查询集中没有工作会很好。

谢谢:)

1 个答案:

答案 0 :(得分:1)

table.objects.all()django.query.QuerySet object。当您运行x[0]时,实际上会调用其__getitem__方法。

您可以在github找到它的实现。

以下是简化版。我只删除了安全检查和切片代码。

def __getitem__(self, k):
    """
    Retrieves an item or slice from the set of results.
    """
    if self._result_cache is not None:
        return self._result_cache[k]

    qs = self._clone()
    qs.query.set_limits(k, k + 1)
    return list(qs)[0]

您会看到,当查询集缓存时,每次运行queryset[index]时,它都会触发新的SQL查询并返回一个新对象。