Python Django表单未保存到数据库
我在网站上搜索了一个解决方案,很多相关的问题,但是没有直接的回应。我的项目中有3个应用程序,其中2个运行得很好,除了这个应用程序,它没有写入数据库 是的,其他两个应用程序写入postgres数据库,我可以查看该表,但这会返回空行,我看不出有任何问题。我希望有人能帮助我,看看下面我的模型,表单和View.py 我的观点.pyPython Django表单未保存到数据库,python,django,database,postgresql,Python,Django,Database,Postgresql,我在网站上搜索了一个解决方案,很多相关的问题,但是没有直接的回应。我的项目中有3个应用程序,其中2个运行得很好,除了这个应用程序,它没有写入数据库 是的,其他两个应用程序写入postgres数据库,我可以查看该表,但这会返回空行,我看不出有任何问题。我希望有人能帮助我,看看下面我的模型,表单和View.py 我的观点.py from django.shortcuts import render, redirect from .forms import EngForm def EngineerL
from django.shortcuts import render, redirect
from .forms import EngForm
def EngineerList(request):
return render(request, "Engineers/elist.html")
def EngineerForm(request):
if request.method == "GET":
form = EngForm()
return render(request, "Engineers/eform.html", {'form':form})
else:
form = EngForm(request.POST)
if form.is_valid():
form.save()
return redirect('/engineer/') #pointing to urls.py paths
我的表格.py
from django import forms
from .models import Engineers
class EngForm(forms.ModelForm):
class Meta:
model = Engineers
fields = '__all__'
labels = {
'workarea' : 'Zone',
'face' : 'Picture',
}
def __init__(self, *args, **kwargs):
super(EngForm, self).__init__(*args, **kwargs)
self.fields['position'].empty_label='Select'
self.fields['workarea'].empty_label='Select'
self.fields['face'].required = False
我的模特
from django.db import models
class Engineers(models.Model):
position = (
('NOC', 'NOC'),
('Supervisor', 'Supervisor'),
('Site Manager','Site Manager'),
('Site Engineer', 'Site Engineer'),
)
region = (
('SS','South-South'),('SW','SW'),('SE','SE'),
('NE','NE'),('NW','NW'),('NC','NC'),
)
firstname = models.CharField(max_length=20)
lastname = models.CharField(max_length=20)
email = models.EmailField(max_length=50)
username = models.CharField(max_length=20)
phone = models.IntegerField()
position = models.CharField(max_length=20, choices=position)
workarea = models.CharField(max_length=20, choices=region)
face = models.ImageField(upload_to='', height_field=15, width_field=9)
我的HTML
{% extends "Dashboard/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
<form method="POST" action="" autocomplete="off">
{% csrf_token %}
<div class="row">
<div class="col-md-12">
{{form.face|as_crispy_field}}
</div>
<p>
<hr>
<p>
<div class="col-md-6">
{{form.firstname|as_crispy_field}}
</div>
<div class="col-md-6">
{{form.lastname|as_crispy_field}}
</div>
<div class="col-md-6">
{{form.username|as_crispy_field}}
</div>
<div class="col-md-6">
{{form.position|as_crispy_field}}
</div>
<div class="col-md-6">
{{form.phone|as_crispy_field}}
</div>
<div class="col-md-6">
{{form.workarea|as_crispy_field}}
</div>
<div class="col-md-12">
{{form.email|as_crispy_field}}
</div>
</div>
<hr>
<div>
<button type="submit" class="btn btn-success"><i class="fas fa-save"></i> Submit</button>
</div>
</form>
{% endblock content %}
{%extends“Dashboard/base.html”%}
{%load crispy_forms_tags%}
{%block content%}
{%csrf_令牌%}
{{form.face{as|u crispy_field}}
{{form.firstname}as_crispy_field}
{{form.lastname}as_crispy_field}
{{form.username}as_crispy_field}
{{form.position}as|u crispy_field}
{{form.phone}as|u crispy_field}
{{form.workarea}as|u crispy_field}
{{form.email}as_crispy_field}
提交
{%endblock内容%}
我的问题是,数据库表返回空行。已解决。应用@GwynBleidD suggest,我查看了文档,然后重新排列了代码
def EngineerForm(request):
if request.method == "POST":
form = EngForm(request.POST)
if form.is_valid():
form.save()
return redirect('/engineer/') #pointing to urls.py paths
else:
form = EngForm()
return render(request, "Engineers/eform.html", {'form':form})
您的视图正在执行重定向,即使表单无法验证。这意味着,如果出现任何验证错误,您将不知道这些错误。我的建议是将视图更改为与中的示例更加内联,并查看表单是否正确验证。此外,如果模型中的
face
字段不是必需的,则需要将其设置为blank=True
。