【问题标题】:Why values are not storing in the table when i have clicked Submit button?当我单击提交按钮时,为什么值没有存储在表中?
【发布时间】:2025-12-07 21:45:06
【问题描述】:

我创建了一个用于获取值并将其放入表中的表单。但是每当我点击提交按钮时,它不会存储或给出任何错误。它只是停留在该页面本身。

Model.py
    class Employee(models.Model):
    ename=models.CharField(max_length=120)
    eaddress=models.CharField(max_length=120)
    eemail=models.CharField(max_length=120)
    ephone=models.CharField(max_length=120)
    emobile=models.CharField(max_length=120)
    eid=models.CharField(max_length=120)
    egender=models.CharField(max_length=120)
    ehire=models.DateTimeField()
    edob=models.DateTimeField()

class Meta:
    db_table="employee"
views.py
    def employee(request):
        emp=Employee.objects.all()
        return render(request,'employee.html',{'emp':emp}) 
    def addemployee(request):
        if request.method == 'POST':
            emp = EmployeeForm(request.POST)
            if emp.is_valid():
                try:
                    form.save()
                    return redirect(employee)
                except:
                    pass
        else:
            emp = EmployeeForm()
return render(request,'addemployee.html',{'emp':emp})


addemployee.html:
    <form method="POST" action="add_employee">  
        {% csrf_token %} 
          {{emp.ename}}
          {{emp.eemail}}
          {{emp.emobile}}
    <button type="submit">Submit</button>
    </form>

【问题讨论】:

    标签: django crud


    【解决方案1】:

    您需要在模板中显示表单错误。所以像这样更新你的视图和模板:

    def addemployee(request):
        emp = EmployeeForm(request.POST or None)
        if request.method == 'POST':
            if emp.is_valid():
                try:
                    emp.save()
                    return redirect(employee)
                except Exception as e:
                    raise e  # for debug purpose now
        return render(request,'addemployee.html',{'emp':emp})
    
    
    addemployee.html:
    <form method="POST" action="add_employee">  
        {% csrf_token %}
          {{ emp.errors }}  // it will render form errors
          {{emp.ename}}
          {{emp.eemail}}
          {{emp.emobile}}
          <button type="submit">Submit</button>
    </form>
    

    我假设您的表单未验证,因为您有许多字段,例如 eidegender 等,需要将其保存在数据库中。如果你使用的是Modelform,那么你可以使用{{ emp.as_p }}as per form rendering documentation而不是{{emp.ename}} {{emp.eemail}} {{emp.emobile}}来渲染表单。

    【讨论】:

    • 我也试过 {{emp.as_p}}。仍然没有存储表单,然后页面也没有导航到下一页。它也没有给出任何错误
    • 我现在发现了错误。它在视图文件中。我使用了 form.save () 但没有我声明的表单对象。清除后我得到了 IntegrityError,例如 django.db.utils。 IntegrityError: (1048, "列 'ehire' 不能为空")
    • 是的,你是对的。我也错过了那部分。
    • 你需要在表单中渲染ehire字段。如果您不想雇用,则可以将其设为可空或使用auto_add_now=True。更多信息可以在文档docs.djangoproject.com/en/2.2/ref/models/fields/#datetimefield 中找到
    • 我让它可以为空,但它也显示了同样的异常