2014-02-10 4 views
1

저는 Django를 처음 접했고 ModelForms를 가지고 놀았습니다. 지금까지 ModelForms를 쉽게 만들 수있었습니다. 그러나 한 가지 문제는 버그가 보인다 저 좀 : 사용자가 양식을 채우고 (예를 들어 int 대신 char 또는 누락 blank=False 값) 오류가있는 경우, 양식이 오류를 뱉어과 같다django 모델 양식의 양식 필드 값 기억하기

양식의 유효성을 검사하지 못했을 때 사용자가 입력 한 값을 잊어 버렸습니다. 나는 에 대한 방법이 있다면 값을 기억하여 사용자가 다시 입력 할 필요가 없도록하고 싶습니다. 순간

, 나는 다음과 같은 것이있다 : 나는 폼에 다시 값을 전달 form_invalid에 뭔가를 할 필요가 가정입니다

class ContactForm(CreateView): 

    form_class = ContactForm 
    template_name = "superform.html" 
    success_url = '/ty/' 

    def form_valid(self, form): 
     # do something useful with validated form 
     return super(ContactForm, self).form_valid(form) 

    def form_invalid(self, form): 
     # do something useful with invalidated form. 
     return super(ContactForm,self).form_invalid(form) 

을 -하지만 (이 작업을 수행하는 방법을 확실하지 오전 ?).

누군가가 올바른 방향으로 나를 가리킬 수 있다면 정말 고마워 할 것입니다.

감사합니다.

---edit ---

  <form class="form" role="form" action="{% url 'coolurl' %}" method="post">{% csrf_token %} 

        {% if form.non_field_errors %} 
         <div class="alert"> 
         {% for error in form.non_field_errors %} 
         <span class="label">Error: {{ error|escape }}</span> 
         {% endfor %} 
         </div> 
        {% endif %} 


        <div class="form-group"> 
         {% if form.name.errors %} 
          <div class="alert"> 
          {% for error in form.name.errors %} 
          <span class="label">Error: {{ error|escape }}</span> 
          {% endfor %} 
          </div> 
         {% endif %} 

         <label class="col-sm-3" for="id_name">Name:</label> 
         <div class="col-sm-6"> 
         <input class="form-control" 
          id="id_name" 
          type="text" 
          name="name" 
          maxlength="128" 
          placeholder="Your name.."> 
         </div> 
        </div> 

        <button type="submit" class="btn btn-success">Submit</button> 
      </form> 
+2

아니요, 이것은 기본 동작입니다. 양식 서식 파일을 보여주십시오. –

+0

은 템플릿에 문제가있는 것 같습니다. 확실히 아약스와 아무 관계도 없음 – Anentropic

+0

@DanielRoseman, Anentropic : 의견을 주셔서 감사합니다. 왜냐하면'{{form_as.p}} '를 사용하면 모든 것이 잘되고 오류가있을 때에도 사용자가 입력 한 값을 기억하는 것 같습니다. 양식 마크 업이 매우 크기 때문에 한 템플릿 만 사용하여 템플릿을 표시했습니다. {{form_as.p}}와 다른 일을하고 있는지 궁금합니다. – AJW

답변

1

시도가 input 태그의 값을 언급하기는 :

<input class="form-control" 
          id="id_name" 
          type="text" 
          name="name" 
          maxlength="128" 
          value="{{ form.name.value|default_if_none:'' }}" 
          placeholder="Your name.."> 
         </div> 
+0

당신은 락! :) 당신의 대답은 모든'input' 태그에 대한 속임수입니다! 'textarea'를 제외하고 -'value'는 이것으로 작동하지 않습니다. 이견있는 사람? : – AJW

+0

OK 텍스트 상자의 값에'{{...}} '을 사용했습니다. 다시 한번 감사드립니다 - 시간을 많이 절약 해 주셨습니다. 답변을 수락했습니다! – AJW

0

당신은 멀리 해당 필드를 렌더링에 대한 책임을 촬영했습니다 Django를 단순히 HTML로 하드 코딩하면됩니다. 즉, 장고는 현재 값을 삽입 할 방법이 없습니다. 오류 후에 다시 표시 할 때뿐만 아니라 기존 데이터베이스 내용을 수정하는 양식이있는 경우에도 마찬가지입니다.

그렇게하지 마십시오. 나는 당신이 단지 form.as_p을 사용하고 싶지는 않지만 이해할 만하다는 것을 이해합니다 : 템플릿의 각 필드를 {{ form.my_field }}으로 출력하십시오. 관련 클래스를 forms.py의 정의 필드에 추가 할 수 있습니다. 그러면 Django가 올바르게 출력합니다.

+0

나는 귀하의 의견에 동의합니다. 'arocks'의 답이 작용합니다! – AJW