在django中,表单提交后,Type object没有属性错误



我得到了错误"类型对象'Input'没有属性'company',但在model.py中,它确实存在,所以一定有一些我没有看到的其他错误。非常感谢您的帮助。

输入——models.py

class Input(models.Model):
    company=models.CharField(max_length=100,default='Empty')
    region=models.CharField(max_length=100)
    start_date=models.DateField(auto_now=False, auto_now_add=False)
    def __unicode__(self):
        return self.company

forms.py

class InputForm(forms.ModelForm):
    company=forms.CharField(required=True)
    regionlist = forms.ModelChoiceField(queryset=Dupont.objects.values('region').distinct())
    start_date=forms.DateField(widget=DateInput(),required=True)
    class Meta:
        model = Input
        fields = ('company', 'region','start_date')
        widgets = {
            'start_date': forms.DateInput(attrs={'class':'datepicker'}),
            'end_date': forms.DateInput(attrs={'class':'datepicker'}),
        }

views.py

def input(request):
    if request.method == 'POST':
        form = InputForm(request.POST or None, request.FILES or None)
        if form.is_valid():
            print 'is valid'
            company = form.cleaned_data['company']
            region = form.cleaned_data['region']
            start_date= form.cleaned_data['start_date']
            form.save()
            return redirect('result')
        else:
            return render_to_response('input.html',{'form': form},context_instance=RequestContext(request))
    else:
        form = InputForm(initial={'company':'coco','uom':'M$'},instance=Input)
        return render_to_response('input.html',{'form': form})

        <form method="post" action="{% url 'result' %}">
        {% csrf_token %}
        <!--enter company name--> 
        <div class="field">
            <p>Company:<input type="text" name="company" value="{{company}}"/>
        </div>
        <!--select region from drop down list-->
        <div class="field" >
            <label> Select the Region:
            {{ form.regionlist }}
                {% for region in form.regionlist.choices %}
                     <option value="{{ val }}" name= "region" {% ifequal data.val val %}selected {% endifequal %}></option>
                {% endfor %}
            </label>
        </div>
        <!--select start date from drop down list-->
        <label for="startDate">Start Month:</label>
        <input name="start_date" id="start_date" class="date-picker"/>
        <!--submit-->
        <div class="fieldWrapper">
        <p><input type="submit" value="Submit" /></p></div>                   
 </form>    

引用

Traceback:
File "C:Python27libsite-packagesdjango-1.8.3-py2.7.eggdjangocorehandlersbase.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:Python27libsite-packagesdjango-1.8.3-py2.7.eggdjangoviewsdecoratorscsrf.py" in wrapped_view
  58.         return view_func(*args, **kwargs)
File "C:UsersuserDesktopSCORinputformviews.py" in input
  34.         form = InputForm(initial={'company':'coco','uom':'M$'},instance=Input)
File "C:Python27libsite-packagesdjango-1.8.3-py2.7.eggdjangoformsmodels.py" in __init__
  320.             object_data = model_to_dict(instance, opts.fields, opts.exclude)
File "C:Python27libsite-packagesdjango-1.8.3-py2.7.eggdjangoformsmodels.py" in model_to_dict
  153.             data[f.name] = f.value_from_object(instance)
File "C:Python27libsite-packagesdjango-1.8.3-py2.7.eggdjangodbmodelsfields__init__.py" in value_from_object
  918.         return getattr(obj, self.attname)
Exception Type: AttributeError at /input
Exception Value: type object 'Input' has no attribute 'company'

这一行:

form = InputForm(initial={'company':'coco','uom':'M$'},instance=Input)

Input 传递为instance,而不是Input实例。要传递一个实例,你需要调用类,例如:

form = InputForm(initial={'company':'coco','uom':'M$'},instance=Input())

但是这在这里是完全无用的,因为如果您不提供实例,您的ModelForm已经知道要实例化哪个模型类。

最新更新