我正在学习Django
,我推荐djangobook.com
。
我有一个这样的模型:
class Publisher(models.Model):
name = models.CharField(max_length=30)
address = models.CharField(max_length=50)
city = models.CharField(max_length=60)
state_province = models.CharField(max_length=30)
country = models.CharField(max_length=50)
website = models.URLField()
def __unicode__(self):
return self.name
我填充了一些数据(如演示中所述)并尝试更新记录的特定字段的值(如上所述),这非常适用:
>>> publisher_list = Publisher.objects.all()
>>> p = publisher_list[0]
>>> p.name = u'Apress'
>>> p.save()
但是当我尝试以下(我假设相当于上面的内容)时,它不起作用。该名称未在数据库中更新。我在这里做错了什么?
>>> publisher_list = Publisher.objects.all()
>>> publisher_list[0].name = 'Apress'
>>> publisher_list[0].save()
参考:http://djangobook.com/en/2.0/chapter05/
感谢。
答案 0 :(得分:2)
您的索引是多次从数据库中检索模型。在变异并保存之前将模型绑定到名称。
答案 1 :(得分:1)
根据QuerySet.__getitem__()
,按项目检索(例如qs[0]
)不会被缓存,并且每次访问都会点击数据库,除非已经评估了查询集,因此缓存已填满:
>>> qs = User.objects.all()[:10]
>>> qs[0] is qs[0] # Similar with your issue, you modified the attribute of the first and tried to save the latter.
False
>>> len(qs) # evaluate and fill cache
10
>>> qs[0] is qs[0]
True
所以你可以
p = Publisher.objects.all()[0]