2015-06-30 3 views
0

Новое в Django. Я пытаюсь показать форму, но вместо этого он:
объект messag.views.CommentAdd на 0x037860D0Django Class-based Form не отображается

forms.py:

from django.http import JsonResponse 


class AjaxableResponseMixin(object): 
    """ 
    Mixin to add AJAX support to a form. 
    Must be used with an object-based FormView (e.g. CreateView) 
    """ 

    def form_invalid(self, form): 
     response = super(AjaxableResponseMixin, self).form_invalid(form) 
     if self.request.is_ajax(): 
      return JsonResponse(form.errors, status=400) 
     else: 
      return response 

    def form_valid(self, form): 
     # We make sure to call the parent's form_valid() method because 
     # it might do some processing (in the case of CreateView, it will 
     # call form.save() for example). 
     response = super(AjaxableResponseMixin, self).form_valid(form) 
     if self.request.is_ajax(): 
      data = { 
       'pk': self.object.pk, 
      } 
      return JsonResponse(data) 
     else: 
      return response 

views.py:

class CommentAdd(AjaxableResponseMixin, CreateView): 
    model = Comment 
    fields = ['author_name', 'text', 'root'] 


class ShowTree(ListView): 
    model = Comment 
    template_name = 'comment_tree.html' 

    def get_context_data(self, **kwargs): 
     context = super(ShowTree, self).get_context_data(**kwargs) 
     context['comment_form'] = CommentAdd() 
     return context 
+0

Когда я использую просто класс CommentAdd в urls.py URL (г «^ добавить/$», CommentAdd .as_view(), name = 'add'), - все работает правильно – Eugene

ответ

1

Это не работает, потому что вам нужно передать экземпляр формы, и вы передаете представление, основанное на классе. CreateView - это class based view, а не ModelForm.

Это может быть проще создать CreateView как in the example и получить данные для создания списка в get_context_data()

+0

Спасибо за ответ! Но я не могу понять, как передать экземпляр формы в мою функцию ShowTree.get_context_data – Eugene

+0

Если вы создадите CreateView, вам не нужно будет передавать экземпляр формы в функцию get_context_data. – fasouto

+0

Пример Django не использует get_context_data для передачи экземпляра формы, я предлагаю вам использовать get_context_data для получения набора комментариев комментариев для создания списка – fasouto

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