2015-06-30 1 views
1

Как установить множественные URL-адреса успеха, используя kwargs или что-то еще?Django множественные URL-адреса успеха

Я хочу, в зависимости от того, какая кнопка нажала другой URL-адрес успеха.

  • Сохранить = Перейти к DetailView

  • сохранить & продолжить = Пребывание в этом UpgradeView

  • сохранить & CreateNew = Перейти к CreateView

Он должен работать позже точно так же, как в администраторе Django

У меня есть этот UpdateView:

class TopicEditView(UpdateView): 
    fields = ['title','description',] 
    model = Topic 

    def post(self, request, *args, **kwargs): 
     data = request.POST.copy() 
     if data.get('save', False): 
      pass 
     elif data.get('save_and_continue', False): 
      pass 
     ... 
     return UpdateView.post(self, request, *args, **kwargs) 

    def get_success_url(self): 
     return reverse('topic_detail', kwargs={'pk':self.object.pk}) 

И этот простой шаблон:

<form action="" method="post"> 
    {% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Speichern" name="save"/> 
    <input type="submit" value="Speichern & weiter" 
     name="save_and_continue"/> 
</form> 

ответ

2

В вашем методе get_success_url, проверьте значения кнопки отправки в self.request.POST и возвращает соответствующий URL:

def get_success_url(self): 
    if self.request.POST.get('save'): 
     return reverse('success_url_for_save') 
    elif self.request.POST.get('save_and_continue'): 
     return reverse('success_url_for_save_and_continue', kwargs={'pk':self.object.pk}) 
    else: 
     return reverse('fallback_success_url') 

Проверка значений в методе post не обязательна.

+1

Спасибо, это было намного легче, когда я понял, что у меня все еще есть свои kwargs в self.request.POST.get. Сначала я подумал, что должен снова установить их, вот почему у меня был аргумент if в методе post. – Sativa

Смежные вопросы