私はグーグルを持っていました、ここの他のトピックも見てください。それでも私のフォームは保存されていません。
見る
def newapprentice(request):
form = NewApprenticeForm()
if request.method == 'POST':
#print('Printing POST:', request.POST)
form = NewApprenticeForm(request.POST)
if form.is_valid():
form.save()
return redirect('apprentices/index.html')
return render(request, 'apprentices/newapprentice.html', {'form': form})
テンプレート
{% extends 'base.html' %}
{% load crispy_forms_tags %}
{% block content %}
<h1>New Apprentice</h1>
<form action="" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<div class="form-row">
<div class="form-group col-md-6 mb-0">
{{ form.name|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.email|as_crispy_field }}
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6 mb-0">
{{ form.role|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.cost|as_crispy_field }}
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6 mb-0">
{{ form.p_name|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.p_time|as_crispy_field }}
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6 mb-0">
{{ form.division|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.line_manager|as_crispy_field }}
</div>
</div>
<div class="form-row">
<div class="form-group col-md-4 mb-0">
{{ form.on_course|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.finished_course|as_crispy_field }}
</div>
<div class="form-group col-md-4 mb-0">
{{ form.left_course|as_crispy_field }}
</div>
</div>
<div class="form-row">
<div class="form-group col-md-6 mb-0">
{{ form.start_date|as_crispy_field }}
</div>
<div class="form-group col-md-6 mb-0">
{{ form.finish_date|as_crispy_field }}
</div>
</div>
<div class="form-row">
<div class="form-group col-md-12 mb-0">
{{ form.notes|as_crispy_field }}
</div>
</div>
<button type="submit" class="btn btn-success">Save</button>
<a href="/apprentices/" class="btn btn-secondary">Back</a>
</form>
{% endblock %}
Form.py
from django.forms import ModelForm
from .models import Apprentice
class NewApprenticeForm(ModelForm):
class Meta:
model = Apprentice
fields = '__all__'
[保存]をクリックしても、文字通り何も起こりません。リダイレクトもエラーもありません。これはコンソールに出力されます[05/Oct/2020 12:58:13] "POST /apprentices/newapprentice/ HTTP/1.1" 200 12188
ご覧のとおりrequest.POST
、ビューにを印刷して、フォームフィールドに入力されたすべてのデータが存在し、すべてがそこにあるかどうかを確認しました。ちょうど今、保存をクリックすると。何も起こりません。
何か案は??ありがとう
フォームが無効です。有効な場合は、オブジェクトを保存します。ただしform.save()
、予想される副作用がない場合でも、redirect(…)
呼び出しの結果は200応答コードではなく302応答コードになります。
次のコマンドでフォームエラーを印刷できます。
def newapprentice(request):
form = NewApprenticeForm()
if request.method == 'POST':
form = NewApprenticeForm(request.POST)
if form.is_valid():
form.save()
return redirect('apprentices/index.html')
print(form.errors) # ← print errors in the console
return render(request, 'apprentices/newapprentice.html', {'form': form})
さらに、フォームを手動でレンダリングする場合は、フィールドごとのエラーとフィールド以外のエラーをレンダリングする方がよいでしょう。Djangoのドキュメントには、レンダリングフィールドという名前のセクションがあります。したがって、次のようにフィールドを書き直す必要があります。
{{ form.name.errors }}
<div class="form-group col-md-6 mb-0">
{{ form.name|as_crispy_field }}
</div>
その特定のフィールドのエラーを表示します。これは、現在ビューをデバッグするだけでなく、ユーザーが無効な入力を提供した場合(有効な電子メールアドレスではない電子メールアドレスなど)に役立ちます。その場合、Djangoはユーザーが問題を修正できるように、エラーのあるフォームをレンダリングできます。
編集:エラー<ul class="errorlist"><li>dept<ul class="errorlist"><li>This field is required.</li></ul></li><li>date_created<ul class="errorlist"><li>This field is required.</li></ul></li></ul>
とテンプレートに基づいて、テンプレートにdept
フィールドがないようです:
{{ form.dept.errors }}
<div class="form-group col-md-6 mb-0">
{{ form.dept|as_crispy_field }}
</div>
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加