2017-02-06 4 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のを使用するために、私は再書き込みする必要があることのURLです)

EDIT: 私の非常に醜いの試み(注:I 2つの送信ボタンがあります.1つは更新するボタン、もう1つは更新してメモを追加するボタンです。

 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から使用する方法を学びました:

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'で試したことを示してください。 ( '/ gameview/1 /)'のメインキーをクエリ文字列( '/ gameview /?match = 1')よりも綺麗にすることはできますが、したくない場合はスイッチを切り替える必要はありません。 'get_success_url'で' self.request.GET.get( 'match') 'にアクセスできます。 – Alasdair

+0

@DanielRosemanなぜ私に聞くことができますか?より安全な? –

答えて

0

何のためにはget_absolute_urlについて(私のような新しい人のために、self.kwargs.getは素晴らしいです)モデルオブジェクト?

from django.urls import reverse 

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

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

そして、あなたのGameViewで

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

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

それは...できましたか?ありがとう、私はチャンスがあるときに私は更新されます! –

関連する問題