【发布时间】:2014-01-24 14:23:07
【问题描述】:
我对 Django 和一般的编程相当陌生,每次有人单击模板中的按钮时,我都会尝试将 IntegerField 递增一。我已经研究了大约 10 个小时(我知道,荒谬),但没有运气......我认为这只是我刚刚看过的非常简单的事情。我以为我已经用this 或this 问题解决了它,但我仍然无法得到它。
这是我的模板(我用它来 {% include %} 在单独的模板中):
{% block body %}
<form method="post" action="/vote/">{% csrf_token %}
<input type="submit" name="endorsers" value="Endorse" />
</form>
{% endblock %}
模型.py:
class IdeaID(models.Model):
user = models.ForeignKey(User)
name = models.CharField(max_length=30)
description = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published', auto_now_add=True)
endorsers = models.IntegerField(default=0)
contributors = models.IntegerField(default=0)
backers = models.IntegerField(default=0)
def __unicode__(self):
return self.name
我的网址是这样设置的:
url(r'^vote/$', 'ideaMachine.views.vote'),
和 Views.py:
@login_required
def vote(request):
if (request.method == 'POST') and ("endorsers" in request.POST):
idea_list = request.POST.getlist('ideaid')
for idea in idea_list:
ideaVote = IdeaID.objects.get(pk=idea)
ideaVote.endorsers += 1
ideaVote.save()
return render_to_response(
'vote_success.html', RequestContext(request)
)
从 django 的开发服务器,我得到一个“'POST /vote/ HTTP/1.1' 200 58”。我不确定这是否有助于解决我的问题。这篇文章实际上并没有像我想要的那样更新我的背书者字段,而是 成功地将我发送到了 vote_success.html。我在这一点上迷路了,任何帮助将不胜感激。提前谢谢!
【问题讨论】:
-
你发过ideaid吗?从外观上看,您提交的是一个空表单,因此idea_list 永远不会得到任何东西(这一行:
idea_list = request.POST.getlist('ideaid')) -
是的,我的问题和 Jeff 一样...您是否发布了“ideaid”的任何值?
-
非常奇怪的描述。由于您的 django 服务器正在显示 POST 请求,因此该表单已明确发布。如果您没有看到数据库中的任何更改,那么 1) 检查您是否甚至超出了条件。您可以通过在此处引发错误来做到这一点,或者如果您有更多时间 - 添加日志记录并将某些内容记录到那里的文件中。 2)就像杰夫说的,看看idea_list是否包含一些东西。
-
哇你们真快!抱歉,如果我含糊不清,这是我的第一篇 stackoverflow 帖子。你们都是对的,表格实际上并没有做任何事情。感谢您的帮助
标签: django python-2.7 django-views