我是Django的新手,我在其他网站上发现了很多东西,但实际上没有什么可以帮助我的。我正在制作一个电影评级应用程序,该应用具有一个滑块,该应用控制您要给电影的恒星,然后将其添加到大量的星星中,然后获得票数的数量,然后找到平均的星星数量为了电影。现在,我无法获得服务器上存储的值,即星级总数和使用提交按钮更新的票数。
目前是我的模板表格
<form action="{% url 'polls:vote' %}" method="post">{% csrf_token %}
<input action="/vote/" name="myvote" related-image-id="votes{{movie.Movie_Title}}" type="range" min="1" max="5" value="0" oninput="mySlider(this)">
<input type="submit" value="Vote!"/>
</form>
这是我的URL文本
from django.conf.urls import url
from . import views
app_name ='polls'
urlpatterns = [
url(r'^', views.index, name='index'),
url(r'^', views.vote, name='vote'),
]
views.py
def index(request):
data=Movies.objects.order_by('-pub_date')
for movie in data:
if movie.Total_Number_of_Votes==0:
movie.avg="No one has voted for this yet be the first"
else:
movie.avg=movie.Total_Number_of_Stars/movie.Total_Number_of_Votes
return TemplateResponse(request, 'polls/index.html', {"data": data})
def vote(self, request):
movie=get_object_or_404(Movies)
thisVote=movie.choice_set.get(pk=request.POST['myvote'])
movie.Total_Number_of_Stars=movie.Total_Number_of_Stars+ thisVote
movie.Total_Number_of_Stars.save()
movie.Total_Number_of_Votes += 1
movie.Total_Number_of_Votes.save()
return HttpResponseRedirect(reverse(request, 'polls:index.html'))
我的印象是,这与Httprespespons有关,但我不确定我对所有这些都很新。任何帮助将不胜感激
好吧,首先,您在vote
视图上遇到了一个大问题。
- 它不会以任何电影标识符作为参数,因此您的提交按钮永远不会对您实际投票的电影采取行动。
- 在行
movie=get_object_or_404(Movies)
上,您调用Movies
类,而不是数据库中的实际电影实例。
这就是您的视线。
def vote(request, pk): # pk would be the Movie's primary key (id)
movie=get_object_or_404(Movies, pk=pk) # This makes the movie var an ACTUAL movie
thisVote=movie.choice_set.get(pk=request.POST['myvote'])
movie.Total_Number_of_Stars=movie.Total_Number_of_Stars+ thisVote
movie.Total_Number_of_Votes += 1
movie.save() # Need to save the movie object and only once
return HttpResponseRedirect(reverse(request, 'polls:index.html'))
,由于您正在更改函数参数,因此您还需要更改URLCONF。
url(r'^(?P<pk>[0-9]+)/vote/$', views.vote, name='vote'), # Needs to be explicit