2017-08-13 48 views
0

django-麻煩,所以我試圖遵循Django的docs- https://docs.djangoproject.com/en/1.11/topics/class-based-views/mixins/#using-formmixin-with-detailview與混入

基本上我正在使用Django一個計算器克隆。 人們可以提出問題,這可以回答與答案

現在我可以使它工作,如果我提供一個鏈接,使他們到一個單獨的頁面提交他們的答案。但這很糟糕。我想要的答案形式是問題頁

基於我來到這個代碼

urls.py-的文檔上

url(r'^view/(?P<pk>\d+)/$',views.QuestionDetail.as_view(),name='detail'),

views.py-

class QuestionDetail(View): 

    def get(self, request, *args, **kwargs): 
     view = QuestionDisplay.as_view() 
     return view(request, *args, **kwargs) 

    def post(self, request, *args, **kwargs): 
     view = Answer.as_view() 
     return view(request, *args, **kwargs) 

哪(我相信)應該爲一個post請求提供一個視圖,並且爲一個get請求提供一個不同的視圖

class QuestionDisplay(generic.DetailView): 
    model = Question 
    template_name = 'questions/question_detail.html' 

    def get_context_data(self, **kwargs): 
     context = super(QuestionDisplay, self).get_context_data(**kwargs) 
     context['form'] = AnswerForm() 
     return context 

^這部分工作正常

class Answer(SingleObjectMixin, FormView): 
    template_name = 'questions/question_detail.html' 
    form_class = AnswerForm 
    model = Answer 

    def post(self, request, *args, **kwargs): 
     if not request.user.is_authenticated: 
      return HttpResponseForbidden() 
     self.object = self.get_object() 
     return super(Answer, self).post(request, *args, **kwargs) 

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

^問題(我想)當我試圖在所提供的網頁,我收到了404頁未找到錯誤的形式提交答辯。具體

沒有找到

頁(404) 請求方法:POST 請求URL:http://127.0.0.1:8000/questions/view/8/ 提出者:questions.views.QuestionDetail

編輯,使得它與工作

class QuestionDetail(View): 

    def get(self, request, *args, **kwargs): 
     view = QuestionDisplay.as_view() 
     return view(request, *args, **kwargs) 

    def post(self, request, *args, **kwargs): 
     pk = kwargs['pk'] 
     view = add_answer_to_question(request, pk) 
     return redirect('questions:detail', pk=kwargs['pk']) 

def add_answer_to_question(request, pk): 
    question = get_object_or_404(Question, pk=pk) 
    if request.method == "POST": 
     form = AnswerForm(request.POST) 
     if form.is_valid(): 
      answer = form.save(commit=False) 
      answer.question = question 
      answer.user_id = request.user.id 
      answer.save() 
      return redirect('questions:detail', pk=question.pk) 
    else: 
     form = AnswerForm() 
    return render(request, 'answers/_answer_form.html', {'form': form}) 

回答

0

你可以試試如果使用ModelForm,則此錯誤與方法get_success_url有關。

from django.core.urlresolvers import reverse_lazy 

def get_success_url(self): 
    return reverse_lazy('questions:detail', kwargs={'pk': self.instance.pk}) 

而且您必須在您的urls.py中設置app_name='questions'

+0

nope同樣的問題: - /問題不在重定向中,問題在於頁面不會加載第一個帖子請求 –

+0

是QuestionDetail中的post方法錯誤機智,我從來沒有看到有人寫這樣的重定向,你可以使用'HttpResponseRedirect'代替。 – Ykh

+0

有一個像'view = Answer.as_view()返回視圖(request,* args,** kwargs)'這樣的測試,並且可以很好地工作。 – Ykh