Skip to main content
 首页 » 编程设计

python之WSGIRequest 对象没有属性 get

2025年05月04日37cmt

有人知道怎么回事吗?我有一个 wsgi 错误。我想添加一些信息来评分,特别是日期。但是,我收到此 wsgi 错误:

错误:

    AttributeError at /polisy/add_paydate_form/35/ 
'WSGIRequest' object has no attribute 'get' 
Request Method: GET 
Request URL:    http://127.0.0.1:8000/polisy/add_paydate_form/35/ 
Django Version: 1.7.7 
Exception Type: AttributeError 
Exception Value:     
'WSGIRequest' object has no attribute 'get' 
Exception Location: D:\praca\tiecase\lib\site-packages\django\forms\widgets.py in value_from_datadict, line 228 
Python Executable:  D:\praca\tiecase\Scripts\python.exe 
Python Version: 3.4.0 
Python Path:     
['D:\\praca\\tiecase\\tiecase\\tlb', 
 'D:\\praca\\tiecase\\tiecase\\tlb', 
 'C:\\WINDOWS\\SYSTEM32\\python34.zip', 
 'D:\\praca\\tiecase\\DLLs', 
 'D:\\praca\\tiecase\\lib', 
 'D:\\praca\\tiecase\\Scripts', 
 'C:\\Python34\\Lib', 
 'C:\\Python34\\DLLs', 
 'D:\\praca\\tiecase', 
 'D:\\praca\\tiecase\\lib\\site-packages'] 
Server time:    Tue, 28 Jul 2015 14:36:43 +0200 
Error during template rendering 
 
In template D:\praca\tiecase\lib\site-packages\crispy_forms\templates\bootstrap3\field.html, error at line 25 
'WSGIRequest' object has no attribute 'get' 
15   
16          {% if field|is_checkboxselectmultiple %} 
17              {% include 'bootstrap3/layout/checkboxselectmultiple.html' %} 
18          {% endif %} 
19   
20          {% if field|is_radioselect %} 
21              {% include 'bootstrap3/layout/radioselect.html' %} 
22          {% endif %} 
23   
24          {% if not field|is_checkboxselectmultiple and not field|is_radioselect %} 
25              {% if field|is_checkbox and form_show_labels %} 
26                  {% if label_class %} 
27                      <div class="controls col-lg-offset-{{ label_size }} {{ field_class }}"> 
28                  {% endif %} 
29                  <label for="{{ field.id_for_label }}" class="{% if field.field.required %} requiredField{% endif %}"> 
30                      {% crispy_field field 'class' 'checkbox' %} 
31                      {{ field.label|safe }} 
32                      {% include 'bootstrap3/layout/help_text_and_errors.html' %} 
33                  </label> 
34                  {% if label_class %} 
35                      </div> 

pay_date_form.py的内容:

import datetime 
from crispy_forms.helper import FormHelper 
from crispy_forms.layout import Layout, Div, Column, HTML, Submit, Field 
from django.forms import ModelForm 
from django import forms 
from primer8_base.utils import get_or_none 
from primer8_insurance_policy.models import PaymentRate 
from tiecase.widgets import DateTimeWidget 
 
 
class PayDateForm(ModelForm): 
 
    payment_date=forms.DateField(required=False, 
                                 input_formats=['%d-%m-%Y'], 
                                 widget=DateTimeWidget 
                                   ) 
 
    def __init__(self, *args, **kwargs): 
        super(PayDateForm, self).__init__(*args, **kwargs) 
 
        self.helper = FormHelper(self) 
        self.helper.form_id="add_pay_date_form" 
        self.helper.form_class = 'form-horizontal' 
        self.helper.all().wrap(Field, css_class="input-block-level") 
        self.helper.layout = Layout( 
                                        Div( 
                                            Column( 
                                                HTML("<h3>Wprowadź datę opłacenia/h3>"), 
                                                css_class='col-md-10 col-md-offset-1'), 
                                                'payment_date' 
                                            )) 
 
        self.helper.layout.append( 
            Submit('save', 'Dodaj', css_class='submit_ajax')) 
 
    class Meta: 
        model = PaymentRate 
        exclude = ['amount', 'due_payment_date', 'accounting_date','is_paid','num_of_payment'] 

这是一个 View :

@login_required 
def add_pay_date_form(request, paymentrate_id): 
    template_name = "policy/pay_date_modal_form.html" 
 
    rate = get_object_or_404(PaymentRate, id=paymentrate_id) 
 
    form = PayDateForm(request, PaymentRate) 
 
    if request.method == "POST": 
        if form.is_valid(): 
            form.save() 
            return JsonResponse({'success': True}) 
 
    return render_to_response(template_name, { 
        'form': form, 
        'rate': rate 
    }, context_instance=RequestContext(request)) 

模板:

  {% extends "base_form.html" %} 
 
{% block "additional" %} 
<script type="text/javascript"> 
    $(document).ready(function(){ 
        $("#{{form.name.auto_id}}").blur(function(){ 
            if(!$('#{{form.short_name.auto_id}}').val()) { 
                $('#{{form.short_name.auto_id}}').val($("#{{form.name.auto_id}}").val()); 
            } 
        }); 
    }); 
 
    $("#add_pay_date_form").submit(function (e) { 
            e.preventDefault(); 
            var formData = new FormData($(this)[0]); 
            $.ajax({ 
                type: 'POST', 
                async: false, 
                cache: false, 
                contentType: false, 
                processData: false, 
                url: '{% url "add_pay_date_form" paymentrate.id %}', 
                data: formData, 
                success: function (response, status, xhr) { 
                    if (xhr.getResponseHeader('Content-Type') == 'application/json') 
                    {   console.log(xhr.getResponseHeader('Content-Type')); 
                        $.magnificPopup.close(); 
                    } else { 
                        $('#{{ form.helper.form_id }}_panel').replaceWith(response); 
                    } 
                } 
            }); 
 
            console.log('test'); 
        }); 
</script> 
 
{% endblock "additional" %} 

和网址:

    url(r'add_paydate_form/(?P<paymentrate_id>\d+)/$', add_pay_date_form, name='add_pay_date_form'), 

我有这个错误,我不知道为什么。也许扩展基本形式有问题?

请您参考如下方法:

这是错误的:

form = PayDateForm(request, PaymentRate) 

您没有将request 对象传递给表单,您传递的是提交的表单数据,即

form = PayDateForm(request.POST, PaymentRate) 

(解释一下:你得到的错误是因为 Django 期待一个类似 dict 的对象,所以它试图调用它的 get 方法来获取特定的数据键,因此 'WSGIRequest' 对象没有属性 'get')

所以你的 View 应该是这样的:

@login_required 
def add_pay_date_form(request, paymentrate_id): 
    template_name = "policy/pay_date_modal_form.html" 
 
    rate = get_object_or_404(PaymentRate, id=paymentrate_id) 
 
    form = PayDateForm(request.POST or None, PaymentRate) 
 
    if form.is_valid(): 
        form.save() 
        return JsonResponse({'success': True}) 
 
    return render_to_response(template_name, { 
        'form': form, 
        'rate': rate 
    }, context_instance=RequestContext(request))