在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'
如果有人可以解释为什么它在查询集中没有工作会很好。
谢谢:)
答案 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查询并返回一个新对象。