WSGIRequest对象没有属性get

时间:2015-07-28 12:50:46

标签: python django

有人知道什么是错的吗?我有一个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'),

我有这个错误,我不知道为什么。也许扩展基础表单有问题吗?

2 个答案:

答案 0 :(得分:4)

这是错误的:

$('.card').each(function(i) {
            $(this).delay((i + 1) * 100).fadeIn(300);
         });

您没有将form = PayDateForm(request, PaymentRate) 对象传递给表单,您传递提交的表单数据,即

request

(解释:你得到的错误是因为Django期待一个类似dict的对象,所以它试图调用它的form = PayDateForm(request.POST, PaymentRate) 方法来获取特定的数据键,因此{{1} })

所以你的观点应该是这样的:

get

答案 1 :(得分:1)

您应该使用request.POST

更改此

form = PayDateForm(request, PaymentRate)

到这个

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