Django中WSGIRequest无get属性错误,表单显示与存储问题求助
问题解决:AttributeError: 'WSGIRequest' object has no attribute 'get'
错误根源
你在views.py的表单验证通过后,错误地用request重新实例化了表单,而不是调用save()方法保存数据。paymentForm(request)会把request对象当成表单的data参数传入,而WSGIRequest并没有get方法,所以触发了这个错误。
修正后的代码
1. views.py(核心修正)
from django.shortcuts import render from .forms import paymentForm def payment(request): if request.method == 'POST': form = paymentForm(request.POST) if form.is_valid(): # 保存表单数据到数据库 form.save() # 替换原来错误的form = paymentForm(request) # 可选:保存后清空表单,方便再次提交 form = paymentForm() else: form = paymentForm() return render(request, 'payment.html', {'form': form})
2. (可选优化)forms.py(遵循PEP8类名规范)
from django.forms import ModelForm from .models import Payment # 类名改为大写开头的PaymentForm,符合Python编码规范 class PaymentForm(ModelForm): class Meta: model = Payment fields = ['cardnumber', 'cardexpiry', 'CVV', 'card_type']
如果修改了类名,记得同步更新views.py里的导入语句:from .forms import PaymentForm,实例化时也用PaymentForm。
3. payment.html示例代码
确保表单以POST方法提交并包含CSRF令牌:
<form method="POST"> {% csrf_token %} {{ form.as_p }} <button type="submit">提交支付信息</button> </form>
额外注意事项
- 确认
models.py中的CardNumberField、CardExpiryField、SecurityCodeField已正确导入,这类字段通常来自第三方库(如django_creditcard),需要先安装库并添加导入语句:from django_creditcard.fields import CardNumberField, CardExpiryField, SecurityCodeField - 数据库迁移:修改模型或表单后,运行
python manage.py makemigrations和python manage.py migrate更新数据库表结构。
内容的提问来源于stack exchange,提问作者Najwan Alharbi
相关产品推荐
相关产品推荐

