You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django Form提交的客户信息在Django Admin中显示为空如何解决

问题根源

你使用的Django ModelForm的字段名与模型定义的字段名不匹配,导致ModelForm无法自动将表单提交的数据映射到模型对应字段,最终存储的记录都是空值。


具体修复步骤

1. 修正forms.py代码

你不需要在ModelForm中重复定义已经在模型里存在的字段,直接在Meta类的fields参数中填写模型对应的字段名即可,如果需要自定义表单显示的标签,可以通过labels参数配置:

from django import forms
from orderentry.models import customerInfo, orderInfo

class customerForm(forms.ModelForm):
    class Meta:
        model = customerInfo
        fields = ('customer_first_name','customer_last_name','shipping_address', 'billing_address',)
        # 自定义表单显示的字段标签,和之前的显示效果保持一致
        labels = {
            'customer_first_name': 'First Name',
            'customer_last_name': 'Last Name',
            'shipping_address': 'Shipping Address',
            'billing_address': 'Billing Address'
        }

2. 修正views.py代码

现有代码存在三个可修复问题:

  • 缺少必要的导入:未导入render和redirect方法,运行时会触发报错
  • 无效代码冗余:orderentry.forms.xxx 这几行赋值操作完全不需要,ModelForm调用save()方法时会自动完成数据存储
  • 表单初始化逻辑错误:request.POST应该仅在POST请求时传入表单,避免GET请求时传入空的QueryDict触发不必要的校验提示
from django.shortcuts import render, redirect
from orderentry.forms import customerForm

def getCustomerInfo(request):
    if request.method == 'POST':
        form = customerForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/orderentry')
    else:
        form = customerForm()
    return render(request, 'orderentry.html', {'form' : form})

3. 可选优化

如果你希望姓名为必填项,可以将模型中customer_first_name和customer_last_name的blank=True改为blank=False,避免用户提交空姓名的记录。


内容的提问来源于stack exchange,提问作者kvc921

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:06:06