django - Django模型不保存
问题描述
我有一个谷歌,看看这里的其他主题。我的表格仍然没有保存。
看法
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 %}
表格.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(…)
调用也会产生 302 响应代码,而不是 200 响应代码。
您可以使用以下方法打印表单错误:
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>
推荐阅读
- reactjs - 使用 React 进行转换 - 我应该使用 TransitionGroup 吗?
- python - 机器人框架正则表达式处理返回值:无
- java - Java中是否有支持按(非唯一)值查找键的映射?
- javascript - 为什么在构造函数中的方法之前需要“this”?
- ruby-on-rails - 在 ruby 中安排任务在每月的 15 日和最后一天工作
- python - Wxpython 应用程序图标
- javascript - 如何通过删除按钮删除产品?
- charts - Google Data Studio 中的折线图,其中 x 值根据其值间隔
- python - 我如何在带有scrapy的字段中写一些东西?
- oracle - PL/SQL:接收一个数组作为参数并循环遍历它