2017-04-30 62 views
0

我對Django非常陌生,在其他網站上發現了很多,但沒有什麼能真正幫助我。我正在製作一個電影評級應用程序,該應用程序具有一個滑塊,用於控制要放映電影的多少顆明星,然後將該數字添加到明星總數中,然後獲取投票數並查找平均星數爲電影。現在,我無法獲取存儲在服務器上的值,例如使用提交按鈕更新的總星數和總票數。無法讓我的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')) 

我有我的印象是,它是事做HttpResponse,但我不確定我對這一切都很新穎。任何幫助,將不勝感激

回答

0

好吧,所以首先你的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 
+0

我現在試過了,它似乎沒有工作。我提交按鈕似乎只是導致頁面刷新,現在它會在URL中添加一個問題值 –

相關問題