Python Django表单未保存到数据库

Python 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

我在网站上搜索了一个解决方案,很多相关的问题,但是没有直接的回应。我的项目中有3个应用程序,其中2个运行得很好,除了这个应用程序,它没有写入数据库

是的,其他两个应用程序写入postgres数据库,我可以查看该表,但这会返回空行,我看不出有任何问题。我希望有人能帮助我,看看下面我的模型,表单和View.py

我的观点.py

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