【问题标题】:WSGIRequest object has no attribute getWSGIRequest 对象没有属性 get
【发布时间】:2026-01-27 09:15:02
【问题描述】:

有人知道怎么回事吗?我有一个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']

这是一个视图:

@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'),

我遇到了这个错误,我不知道为什么。扩展基本形式可能有问题?

【问题讨论】:

  • 看到你找到了你的解决方案,但是一个提示,检查 Djangos TemplateResponse。它类似于render_to_response。一个例子; render_to_response(template_name, { 'form': form, 'rate': rate }, context_instance=RequestContext(request)) 将变为 TemplateResponse(request, template_name, {...})
  • 如果您是因为在使用自定义装饰器时遇到同样的错误而从 Google 来到这里的,这可能是因为您使用的是 @wraps 而不是 @wraps(view_function),如以下答案所述:@987654321 @

标签: python django


【解决方案1】:

这是错误的:

form = PayDateForm(request, PaymentRate)

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

form = PayDateForm(request.POST, PaymentRate)

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

所以你的视图应该是这样的:

@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))

【讨论】:

    【解决方案2】:

    你应该使用request.POST

    改变这个

    form = PayDateForm(request, PaymentRate)
    

    到这里

    form = PayDateForm(request.POST or None, PaymentRate)
    

    【讨论】:

      最近更新 更多