1

私は最小限のフィールド(テスト用)でフォームを作成しましたが、form.is_valid()には入りません

ここに最小限のコードがあります

models.py

 from django.db import models

 class sample(models.Model):
      field1=models.CharField(max_length=100)
      field2=models.CharField(max_length=100)

forms.py で

from django.forms import ModelForm
from app.models import sample

class someform(ModelForm):
      class Meta:
        model=sample

views.py で

some imports

def index(request):
    return render(request, 'app/index.html')

def contact(request):
    if request.method=='POST':
         form=someform(request.POST)
         if form.is_valid():
            field1=form.cleaned_data['field1']
            field2=form.cleaned_data['field2']
            return HttpResponse("valid")
         else:
            return HttpResponse("invalid")
    else:
            form=someform()
            return HttpResponse("error")

問題は、 (if form.is_valid()) に入らないことです。何か足りないのですか?助けてください

index.html で

<html>
      <body bgcolor="#2E9AFE">
      <form action="contact" method="post" enctype="multipart/form-data">
      {% csrf_token %}
      <input type="text" id="field1" name="field1">
      <input type="text" id="field2" name="field2">
      <input type="submit" id="submit" name="submit">
      </form></body></html>
4

2 に答える 2

4

リクエストが views.py で POST でない場合、最初にフォームを index.html に渡します。

else:
            form=someform()
            return render(request, 'index.html', locals())

テンプレートでは、次のようにする必要があります。

<form action="contact" method="POST" xmlns="http://www.w3.org/1999/html">
    {% csrf_token %}
        {{ form.as_p }}
        <button type="submit" class="btn">Submit</button>
</form>
于 2013-08-01T12:31:10.643 に答える
3

id_field1POST クエリを受け取ると、Django は IDとの 2 つのフィールドを探しid_field2ます。したがって、HTML は次のようになります。

<html>
   <body bgcolor="#2E9AFE">
      <form action="contact" method="post" enctype="multipart/form-data">
        {% csrf_token %}
         <input type="text" id="id_field1" name="field1">
         <input type="text" id="id_field2" name="field2">
         <input type="submit" id="submit" name="submit">
         </form>
   </body>
</html>

別の解決策は、{{ form.as_p }}または{{ form.as_table }}を使用して入力を内部でレンダリングすることです

または自動的にタグ付けします。

また、現在の HTML に{{ form.non_field_errors }}{{ form.field1.errors }}、およびを追加して、検証が失敗したときにフォーム エラーを表示することもできます。{{ form.field2.errors }}

于 2013-08-01T12:31:38.830 に答える