Django 表单未保存到数据库

时间:2021-05-25 11:11:13

标签: python django database postgresql

我在网站上搜索了解决方案和许多相关问题,但没有给出直接答复。我的项目中有 3 个应用程序,其中 2 个运行良好,除了这个应用程序,它没有写入数据库。

是的,其他 2 个应用程序写入 postgres 数据库,我可以查看表,但这返回空行,我看不出任何问题。我希望有人可以帮助我,请参阅下面我的 Model、Form 和 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

我的模型.py

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 %}

我的问题是,数据库表返回空行。

1 个答案:

答案 0 :(得分:0)

解决了。应用@GwynBleidD 建议,我查看了文档,然后重新排列了代码。

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})
相关问题