2015-07-14 3 views
0

Я понятия не имею, и мне нужно спросить вашего совета.Как правильно определить начальные значения для ModelForm?

У меня есть простой вид:

class CommentForm(ModelForm): 
    class Meta: 
     model = Comment 
     fields = ['text','author','news'] 

Я хочу, чтобы добавить форму в DetailView и hadle эту форму там:

class NewsDetailView(DetailView): 
    model = News 
    template_name = 'news/detail.html' 

    def get_initial(self): 
     return {'news': self.get_object(), 'author': self.request.user} 

    def get_context_data(self, **kwargs): 
     context = super(NewsDetailView, self).get_context_data(**kwargs) 
     context['form'] = CommentForm(initial=self.get_initial()) 
     return context 

    def post(self, request, *args, **kwargs): 
     ''' 
     comment_form = CommentForm(request.POST) 
     if comment_form.is_valid(): 
      comment_form.save() 

Я не хочу, чтобы показать 'автора' и новости fieds. Но если я прячу их, я не могу получить начальные значения ..

ОБНОВЛЕНО:

После проверки формы мне нужно возвращать текущий экземпляр формы в шаблоне путем обновления страницы. Я попытался следующее:

 comment_form = CommentForm(request.POST, request=request) 
     if comment_form.is_valid() and comment_form.validate_user(): 
      comment_form.save() 
      return HttpResponseRedirect(request.META.get('HTTP_REFERER')) 
     else: 
      context = super(NewsDetailView,self).get_context_data(**kwargs) 
      context['form'] = comment_form 
      return self.render_to_response(context) 

Но не работал.

+0

Как ты скрываешь их? –

+0

Я пробовал их не показывать. Просто использовал {{form.text}} в шаблоне. –

+0

Вы можете показать их в своем шаблоне, если у вас есть 'HiddenInput' –

ответ

1

Если вы не визуализируете свои поля, используя {{ form.author }} и {{ form.news }}, форма не подтвердится. Попробуйте использовать HiddenInput для каждого поля, вы можете сделать это с помощью переопределения __init__ метода вашей формы:

class CommentForm(ModelForm): 
    def __init__(self, *args, **kwargs): 
     super(CommentForm, self).__init__(*args, **kwargs) 
     self.fields['author'].widget = forms.HiddenInput() 
     self.fields['news'].widget = forms.HiddenInput() 

    class Meta: 
     model = Comment 
     fields = ['text','author','news'] 
+0

Да. это работает! Спасибо за asssit –

+0

Добро пожаловать! –

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