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
相关产品推荐
相关产品推荐

