1

我正在开发一个类似于本教程的基本 Django 应用程序。在创建和保存 poll 后,我尝试更改它的值,但我不能。我已经尝试过使用.commit()除了和而不是.save()并且这也不起作用。这是我尝试从 shell 更改内容时的样子。通过 HTML 时的类似结果(即失败)。有什么建议么?我尝试更改模型中editable=true没有导致任何错误但也没有帮助的字段的属性。有什么想法可以在这里发生吗?

>>> from votes.models import polls
>>> polls.objects.all()[2].title
u'best band'
>>> polls.objects.all()[2].title='best album'
>>> polls.objects.all()[2].title
u'best band'
>>> polls.objects.all()[2].title='best album'
>>> polls.objects.all()[2].save()
>>> polls.objects.all()[2].title
u'best band'
4

2 回答 2

2

每次调用时polls.objects.all(),您都会从数据库中获得一组重组对象 - 每次调用时.all(),它都会再次为您从数据库中重组它们,从而创建一个新副本。您正在修改其中之一,但不保存您修改的同一个。

你在做什么:

>>> from votes.models import polls
>>> poll = polls.objects.all()[2]
>>> poll.title = 'best album'
>>> poll.title
'best album'
>>> another_copy_of_poll = polls.objects.all()[2]
>>> another_copy_of_poll.title
u'best band'
>>> another_copy_of_poll.save()

你应该做的:

>>> from votes.models import polls
>>> poll = polls.objects.all()[2]
>>> poll.title = 'best album'
>>> poll.title
'best band'
>>> poll.save()
于 2012-10-21T01:59:15.387 回答
2

解释托马斯的评论。

将 polls.objects.all[2] 分配给一个变量,然后更改该对象的标题属性并保存它。

>>> poll = polls.objects.all[2]
>>> poll.title = 'best album'
>>> poll.save() 
于 2012-10-21T02:02:33.683 回答