2017-02-06 63 views
0

我希望我的用戶能夠看到頁面,更新該頁面,然後返回到該頁面或繼續進行更多編輯。Django - UpdateView中的動態success_url

這裏的視圖來顯示信息:所以現在他們想加入一個遊戲信息

# urls.py  
url(r'^gameview/$', views.GameView.as_view(template_name='matchview.html'), name='GameView') 

# Views.py 
class GameView(generic.TemplateView): 
    template_name = "matchview.html" 

    def get_context_data(self, **kwargs): 
     context = super(GameView, self).get_context_data(**kwargs) 
     q = self.request.GET.get('match') 
     context['report'] = GameNotes.objects.filter(game=q) 
     context['game'] = Schedule.objects.get(match=q) 
     context['gamepic'] = Photo.objects.filter(game=q) 
     return context  

。我使用的UpdateView

class GameView(generic.TemplateView): 
    template_name = "matchview.html" 

def get_context_data(self, **kwargs): 
    context = super(GameView, self).get_context_data(**kwargs) 
    q = self.request.GET.get('match') 
    context['report'] = GameNotes.objects.filter(game=q) 
    context['game'] = Schedule.objects.get(match=q) 
    context['gamepic'] = Photo.objects.filter(game=q) 
    return context 

當用戶完成在後一種觀點的更新,他們應該返回到前上完全相同的團隊。 This post幫助我向正確的方向前進,就像使用'get_success_url'一樣,但是我仍然堅持因爲我不認爲我在使用kwargs。我試過的所有東西都會導致錯誤。

(我(一飲而盡)的想法是,我要重新寫使用的PK讓這東西是比較容易的網址,但我想確認)

編輯: 我的fugly嘗試(注:我有兩個提交按鈕,一個用於更新,另一個用於更新和添加註釋)。

 def form_valid(self, form): 
    if form.is_valid(): 
     form.save() 
    if 'submit' in self.request.POST: 
     q = self.request.GET.get('match') 
     return reverse_lazy('TeamView', args=(q)) 
    else: 
     return render('addnotes', {'game' : q}) 

SOLUTION:

學會了如何使用URL參數kwargs: (任何人新我一樣,self.kwargs.get輝煌)

def get_success_url(self, **kwargs): 
     q = self.kwargs.get('match') 
     if "submit" in self.request.POST: 
     url = reverse('GameView', args={q : 'match'}) 
     else: 
      url = reverse('AddNotes', args={q : 'match'}) 
     return url 
+0

你並不需要使用的PK,但你真的應該使用URL參數而不是查詢字符串。 –

+0

請用'get_success_url'顯示你已經嘗試了什麼。在URL('/ gameview/1 /)'中擁有主鍵比查詢字符串('/ gameview /?match = 1')更乾淨,但如果不想要,則不必切換。您可以在'get_success_url'中訪問'self.request.GET.get('match')'。 – Alasdair

+0

@DanielRoseman我可以問爲什麼?更安全? –

回答

0

什麼get_absolute_url爲模型對象?

https://docs.djangoproject.com/en/1.10/ref/models/instances/#get-absolute-url

from django.urls import reverse 

class GameModel(models.Model): 
    .... 

    def get_absolute_url(self): 
     return reverse('game:single_page', args=[str(self.id)]) 

而在你GameView:

class GameView(generic.TemplateView): 
    template_name = "matchview.html" 

    def get_context_data(self, **kwargs): 
     .... 

    def get_success_url(self, **kwargs): 
     return self.object.get_absolute_url() 
+0

那......可以......工作嗎?謝謝,我有機會時會更新! –