我做了一个简单的博客和django民意调查教程。我试图让他们一起工作。当我加载一篇文章时,与它相关的投票加载,投票再次工作,但当我点击一个选项,然后投票按钮,它加载与民意调查ID的ID。林不知道,如果我的“投票”功能的意见,我的“投票”网址,或我的模板搞砸了?这里是我的代码:将django民意调查教程应用程序添加到其他应用程序
models.py:
# Post class
class Post(models.Model):
title = models.CharField(max_length=60)
description = models.CharField(max_length=200)
body = models.TextField()
created = models.DateTimeField(auto_now_add=True)
def display_mySafeField(self):
return mark_safe(self.body)
def __unicode__(self):
return self.title
# Poll for the Post
class Poll(models.Model):
question = models.CharField(max_length=200)
total_votes = models.IntegerField(default=0)
post = models.ForeignKey(Post)
voted = models.BooleanField(default=False)
def __unicode__(self):
return self.question
# Choice for the poll
class Choice(models.Model):
poll = models.ForeignKey(Poll)
choice = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
percentage = models.DecimalField(default=0.0, max_digits=5, decimal_places=2)
def __unicode__(self):
return self.choice
urls.py:
urlpatterns = patterns('',
### main/index page
url(r'^$', 'blog.views.main', name='index'),
### url for the post.html
url(r'^post/(\d+)', 'blog.views.post'),
### polls
url(r'^polls/(\d+)/results/$', 'blog.views.results'),
url(r'^polls/(\d+)/vote/$', 'blog.views.vote'),
url(r'^revote/(\d+)/$', 'blog.views.vote_again'),
)
views.py:
# main view for the posts
def main(request):
posts = Post.objects.all().order_by("-created")
paginator = Paginator(posts, 5)
try: page = int(request.GET.get("page", '1'))
except ValueError: page = 1
try:
posts = paginator.page(page)
except (InvalidPage, EmptyPage):
posts = paginator.page(paginator.num_pages)
d = dict(posts=posts, user=request.user,
post_list=posts.object_list, months=mkmonth_lst())
return render_to_response("list.html", d)
def post(request, pk):
post = Post.objects.get(pk=int(pk))
comments = Comment.objects.filter(post=post)
try:
poll = Poll.objects.get(post=post)
except Poll.DoesNotExist:
poll = None
d = dict(post=post, comments=comments, form=CommentForm(), user=request.user,
months=mkmonth_lst(), poll=poll)
d.update(csrf(request))
return render_to_response("post.html", d)
#view to vote on the poll
def vote(request, post_id):
global choice
p = get_object_or_404(Poll, pk=post_id)
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
# Redisplay the poll voting form.
return render_to_response('post.html', {
'poll': p,
'error_message': "You didn't select a choice.",
}, context_instance=RequestContext(request))
else:
selected_choice.votes += 1
p.total_votes += 1
selected_choice.save()
p.voted = True
p.save()
choices = list(p.choice_set.all())
for choice in choices:
percent = choice.votes*100/p.total_votes
choice.percentage = percent
choice.save()
return HttpResponseRedirect(reverse("blog.views.post", args=[post_id ]))
def vote_again(request, post_pk):
try:
p = get_object_or_404(Poll, post_id=post_pk)
except (KeyError, Poll.DoesNotExist):
pass
else:
p.voted = False
p.save()
return HttpResponseRedirect(reverse("blog.views.post", args=[post_pk]))
这是正在发生的事情:
post1 - linked to - poll1
post2 - not linked
post3 - linked to - poll2
当我投票关于链接到post3的poll2时,它更新poll2的数据库,但它重新加载post2而不是post3。
你可以是任何更具体?你是否在所有可能不适用的范围内缩小范围?你有什么尝试?你有没有在调试器'pdb'中放入代码?你必须帮助我们一点点来帮助你! – dm03514 2012-08-09 00:00:15
我不确定你在这里遇到的确切问题。此外,它无法加载您的整个代码库。 – 2012-08-09 00:00:36
我试着将pk,poll_pk,poll_id,post pk传递给视图函数,有时候我会得到一个错误,但是它的工作时间还剩余时间,但是重新载入了有投票的id的帖子。 – lciamp 2012-08-09 01:04:26