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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:08:11