2016-12-04 8 views
0

フォームを送信して何らかの理由で検証されないと、フォームはすべて空白になります。私は完全なフォームをレンダリングするために{{form}}を使用していません。私は他の人にそれをカスタマイズさせたいと思います。Django - フォームの検証後にフォームの値を保持する

これは、フォームの一部です:

<form method="post" action="" enctype="multipart/form-data">{% csrf_token %} 
       <div class="panel panel-default"> 
        <div class = "panel-heading"> 
         Informações de Contato 
        </div> 
        <div class = "panel-body"> 
         <div class="input-group"> 
          <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> 
          <input type="text" class="form-control" 
          id="id_{{ anuncioForm.nome_contato.name }}" 
          name="{{ anuncioForm.nome_contato.name }}" 
          value= "{{ request.user.first_name }} {{request.user.last_name}}" 
          placeholder="Nome"> 
         </div> 
         <p class="help-text">{{ anuncioForm.nome_contato.help_text }} </p> 
         <br> 

         <div class="input-group"> 
          <span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span> 
          <input type="text" class="form-control" 
          id="id_{{ anuncioForm.email_contato.name }}" 
          name="{{ anuncioForm.email_contato.name }}" 
          value="{{ request.user.email }} " 
          placeholder="E-mail"> 
         </div> 
         <p class="help-text">{{ anuncioForm.email_contato.help_text }} </p> 
         <br> 

         <div class="input-group"> 
          <span class="input-group-addon"><i class="glyphicon glyphicon-glyphicon glyphicon-phone"></i></span> 
          <input type="text" class="form-control" 
          id="id_{{ anuncioForm.telefone_contato.name }}" 
          name="{{ anuncioForm.telefone_contato.name }}" 
          placeholder="Telefone ou Celular"> 
         </div> 
         <p class="help-text">{{ anuncioForm.telefone_contato.help_text }} </p> 
        </div> 
       </div> 

このview.py

def anunciar_imovel(request): 
    ImageFormSet = modelformset_factory(ImagensAnuncio, 
             form=ImagensForm, extra=3) 
    if request.method == 'POST': 
     anuncioForm = AnuncioForm(request.POST, request.FILES) 
     formset = ImageFormSet(request.POST, request.FILES, 
           queryset=ImagensAnuncio.objects.none()) 

     if anuncioForm.is_valid() and formset.is_valid(): 
      novo_anuncio = anuncioForm.save(commit=False) 
      novo_anuncio.user = request.user 
      novo_anuncio.save() 

      for form in formset.cleaned_data: 
       imagem = form['imagem'] 
       photo = ImagensAnuncio(anuncio=novo_anuncio, imagem=imagem) 
       photo.save() 
      return render(request, 'account/index.html') 
    else: 
     anuncioForm = AnuncioForm() 
     formset = ImageFormSet(queryset=ImagensAnuncio.objects.none()) 
    return render(request, 'imoveis/anunciar.html', {'anuncioForm':anuncioForm,'formset':formset }) 

私は満たされた値を保つために何ができますか?

+0

あなたのコードにはあなたが探しているバハビールがあります。 – e4c5

+0

値はテストでしたが、正しいアプローチであるかどうかはわかりませんでした...ありがとう –

答えて

0

したい動作を取得するためには、あなたがanuncioFormからの値を使用する必要があります:フォームが有効でない場合

あなたのビューで
<form method="post" action="" enctype="multipart/form-data">{% csrf_token %} 
    <div class="panel panel-default"> 
     <div class = "panel-heading"> 
      Informações de Contato 
     </div> 
     <div class = "panel-body"> 
      <div class="input-group"> 
       <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> 
       <input type="text" class="form-control" 
         id="id_{{ anuncioForm.nome_contato.name }}" 
         name="{{ anuncioForm.nome_contato.name }}" 
         value= "{{ anuncioForm.nome_contato.value or (request.user.first_name + ; ' + request.user.last_name) }}" 
         placeholder="Nome"> 
      </div> 
      <p class="help-text">{{anuncioForm.nome_contato.help_text }} </p> 
      <br> 
      <div class="input-group"> 
       <span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span> 
       <input type="text" class="form-control" 
         id="id_{{ anuncioForm.email_contato.name }}" 
         name="{{ anuncioForm.email_contato.name }}" 
         value="{{ anuncioForm.email_contato.value or request.user.email }} " 
         placeholder="E-mail"> 
      </div> 
      <p class="help-text">{{ anuncioForm.email_contato.help_text }}</p> 
      <br> 
      <div class="input-group"> 
       <span class="input-group-addon"><i class="glyphicon glyphicon-glyphicon glyphicon-phone"></i></span> 
       <input type="text" class="form-control" 
         id="id_{{ anuncioForm.telefone_contato.name }}" 
         name="{{ anuncioForm.telefone_contato.name }}" 
         value="{{ anuncioForm.telefone_contato.value }}" 
         placeholder="Telefone ou Celular"> 
      </div> 
      <p class="help-text">{{ anuncioForm.telefone_contato.help_text }} </p> 
     </div> 
    </div> 
+0

いいえ。それは私のものですが、正しいアプローチであるかどうかはわかりませんでした。実際にはjqueryで検証を行っていますので、フォームが有効でない場合(jsルールに従って)ページがレンダリングされません。ありがとうございました ! –

1

は、新しい空白のフォームテンプレートに送信されています。エラーが適切に表示されるように、ユーザーが入力したフォームを送信する必要があります。

また、テンプレートを調整してエラーを表示する必要があります。現在、それを行っていません。

ビューを修正するには:

def anunciar_imovel(request): 
    ImageFormSet = modelformset_factory(ImagensAnuncio, 
             form=ImagensForm, extra=3) 
    anuncioForm = AnuncioForm(request.POST or None, request.FILES or None) 
    formset = ImageFormSet(request.POST or None, request.FILES or None, 
           queryset=ImagensAnuncio.objects.none()) 

    if anuncioForm.is_valid() and formset.is_valid(): 
     novo_anuncio = anuncioForm.save(commit=False) 
     novo_anuncio.user = request.user 
     novo_anuncio.save() 

     for form in formset.cleaned_data: 
      imagem = form['imagem'] 
      photo = ImagensAnuncio(anuncio=novo_anuncio, imagem=imagem) 
      photo.save() 

     return render(request, 'account/index.html') 

    return render(request, 'imoveis/anunciar.html', 
        {'anuncioForm':anuncioForm,'formset':formset }) 

テンプレートを修正するには、フォームセットと個々のフォーム自体に何らかのエラーがあるかどうかを確認する必要があります。 it is detailed in the documentationのように、私はこの練習をあなたに任せます。

+0

ありがとうございます。実際には私はhtml(フィールド値を呼び出す)に保つことに決めましたが、あなたのアンカーは正しいです!私はあなたの助けに感謝します ! –

関連する問題