2015-12-25 2 views
0

Я использую представления класса Django. И у меня есть два класса: один для отображения формы на странице, а второй для его обработки:Как получить исходные данные в CreateView, Django

views.py:

class CommentFormView(CreateView): 
    form_class = AddCommentForm 
    model = Comment 
    success_url = '/' 

    def form_valid(self, form): 
     form.instance.author = self.request.user 
     form.instance.post = ???? 
     return super(CommentFormView, self).form_valid(form) 


class BlogFullPostView(BlogBaseView, DetailView): 
    model = Post 
    template_name = 'full_post.html' 
    pk_url_kwarg = 'post_id' 
    context_object_name = 'post' 

    def get_context_data(self, **kwargs): 
     context = super(BlogFullPostView, self).get_context_data(**kwargs) 
     context['form'] = AddCommentForm(initial={'post': self.object}) 
     return context 

full_post.html:

<form action="/addcomment/" method="post" > 
     {% csrf_token %} 
     {{ form }} 
     <button type="submit" >Add comment</button>    
</form> 

URLs:

url(r'^blog/post/(?P<post_id>\d+)/$', BlogFullPostView.as_view()), 
url(r'^addcomment/$', CommentFormView.as_view()), 

И в def form_valid Мне нужно заполнить полевой пост, значение которого я прошел в BlogFullPostView в get_context_data: initial={'post': self.object}

Но как я могу получить его в CommentFormView?

ответ

0

Я решил это так: во-первых, я пытаюсь использовать метод get_initial. Но я ничего не возвращаю. Итак, я решил спрятать поле автозаполнения post - Я делаю это скрытым полем. Итак, тогда CreateView легко может создать объект Comment:

widgets = { 
      'content': forms.Textarea(), 
      'post': forms.HiddenInput(), 
     } 

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

  • Нет связанных вопросов^_^