django save方法的问题

django使用过程中发现一个问题,就是但从filter的结果是一个列表,通过列表下标的方式save的
方式并不能成功。

我们看个例子:

1
2
3
4
5
6
7
8
9
10
11
12
>>> p[1].first_name
u'Kevin'
>>> p[1].first_name = 'sss'
>>> p[1].save()
>>> p[1].name
Traceback (most recent call last):
File "<console>", line 1, in <module>
AttributeError: 'Person' object has no attribute 'name'
>>> p[1]
<Person: San Zhang>
>>> p
<PersonQuerySet [<Person: Yang >, <Person: San Zhang>, <Person: Li >, <Person: Kevin Kong>]>

由此可见,数组下标的方式不能正确的给值赋值。这里我们需要将借助中间变量来实现这个目的:

1
2
3
4
5
6
7
>>> x = p[0]
>>> x.first_name
u'Yang'
>>> x.first_name = 'xxx'
>>> x.save()
>>> x.first_name
'xxx'

这样就能避免上述问题引起的错误结果。