2017-08-29 104 views
0

ドキュメントに続いてカスタムエラーメッセージを作成しましたが(私が見つけたように)、エラーは発生しません。ここに私のコードは次のとおりです。テンプレートにDjango ModelFormのエラーメッセージが表示されない

<form method = "POST" action="{% url 'precheck:upload' %}" enctype="multipart/form-data" name="uploadForm"> 
     {% csrf_token %} 

     {% for field in form %} 
     <div> 
      <strong>{{ field.errors }}</strong> 
      {{ field.label_tag }} {{ field }} 
      {% if field.help_text %} 
       <p class ="help-text">{{ field.help_text }}</p> 
      {% endif %} 
     </div> 
     {% endfor %} 

     <br /> 
     <button type="button" id="uploadButton" data-loading-text="Loading..." class="btn btn-primary" autocomplete="off" style="margin: auto 20%; ">Upload</button> 

    </form> 

views.py

def upload(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES, user = request.user) 
     if form.is_valid(): 
      form.save() 
      request.session['jobID'] = request.POST['jobID'] 
      #job = Job.objects.filter(user_id = request.user.id).filter(jobID = request.POST['jobID']).latest() 
      # initialize(job) 
      return render(request,'precheck/run_precheck.html') 
    form = UploadFileForm() 
    historyList = Job.objects.filter(user_id = request.user.id)[:10] 
    return render(request, 'precheck/upload.html',{'form': form, 'history': historyList}) 

upload.html

forms.py

class UploadFileForm(forms.ModelForm): 
    class Meta: 
     model = Job 
     fields = ['jobID','original_file'] 
     labels = { 
      'jobID': _('Job ID'), 
      'original_file': _('File'), 
     } 
     error_messages = { 
      'jobID': { 
       'max_length': _("Job ID is limited to 50 characters."), 
       'required': _("Please provide a Job ID."), 
       'invalid': _("Job ID must be a combination of letters, numbers, - and _.") 
      }, 
      'original_file': { 
       'required': _("Please provide a file."), 
       'validators': _("Please ensure you are selecting a zipped (.zip) GDB."), 
      }, 
     } 
     help_texts = { 
      'original_file': _('Please provide a zipped (.zip) GDB.'), 
     } 

私は関連性があると思うすべてを含めました。何かもっと必要なものがあれば教えてください。

+0

フィールドを検証し、これらのエラーを生成するために何をしていますか?私が「必須」を例に挙げると、 'job'モデルの' jobID'と 'original_file'必須フィールドは必須ですか?そして、あなたが 'jobID'をフォームに記入しないと、投稿後にエラーが表示されないと言っていますか?あなたのビューは実際にあなたのフォームを検証し、それが有効でない場合にレンダリングしますか? (あなたのview.pyコードを見せてください) – dirkgroten

+0

@dirkgroten上記の 'views.py'を追加しました。 'jobID'と' original_file'はモデルの必須フィールドです。 'jobID'は' validate_slug'と 'MaxLengthValidator'を使って検証されます。 – chaserchap

答えて

2

問題は、フォームが有効でない場合、あなたが最初のフォームにフォームをリセットしていることである:

form = UploadFileForm() 
historyList = Job.objects.filter(user_id = request.user.id)[:10] 
return render(request, 'precheck/upload.html',{'form': form, 'history': historyList}) 

あなたの流れは(そのエラーが発生した)結合した形をレンダリングする必要があるので、それは次のようになります。

if request.method == 'POST': 
    form = UploadFileForm(request.POST, request.FILES, user = request.user) 
    if form.is_valid(): 
     # do stuff for valid form 
     return redirect 
elif request.method == 'GET': 
    form = UploadFileForm() 
# flow common for GET and invalid form 
return render(request, template, {'form': form}) 
関連する問題