【问题标题】:Django AttributeError: calling form.is_valid() always results in Object has no attribute 'is_vaild' [closed]Django AttributeError:调用 form.is_valid() 总是导致 Object has no attribute 'is_vaild' [关闭]
【发布时间】:2014-07-22 17:28:07
【问题描述】:

我一整天都在寻找解决方案,我几乎浏览了 Stackoverflow 上的所有答案,但仍然无法解决我的问题。所以,我不得不提出这个问题。

在models.py中,我有:

from django.db import models
import datetime
from django.utils import timezone

class Cap(models.Model):

    title = models.CharField(max_length=50)
    user_id = models.CharField(max_length=100)
    dest_id = models.CharField(max_length=100)
    cap_id = models.CharField(max_length=500)

    text_part = models.FileField(upload_to='texts/%Y/%m/%d')

    time_to_live = models.IntegerField()
    pub_date = models.DateField()

    def __unicode__(self):
        return self.title

然后在 forms.py 中,我有:

from django.forms import ModelForm

from latercap.models import Capsule

class CapForm(ModelForm):
    class Meta:
        model = Cap
        fields = '__all__'

然后在views.py中,我有:

from django.shortcuts import render
from django.http import HttpResponseRedirect
from myapp.forms import CapForm

def upload(request):
    # Handle file upload
    if request.method == 'POST':
        form = CapForm(request.POST, request.FILES)
        if form.is_vaild():
            form.save()
            # Redirect to the upload page after POST
            return HttpResponseRedirect('/myapp/upload/')
    else:
        form = CapForm() # An empty, unbound form

    message = "You can upload your message here!"
    context = {'message': message, 'form': form}

    # Render upload page with the documents and the form
    return render(request, 'myapp/upload.html', context)

然后在upload.html中,我有:

<b>{{message}}</b>

<form action="{% url 'myapp:upload' %}" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <p>{{ form.non_field_errors }}</p>
    <p>Title: {{ form.title }}</p>
    <p>From: {{ form.user_id }}</p>
    <p>To: {{ form.dest_id }}</p>
    <p>No. {{ form.cap_id }}</p>
    <p>Open after: {{ form.time_to_live }}</p>
    <p>Publish date: {{ form.pub_date }}</p>
    <p>My message:</p>
    <p>
       {{ form.text_part }}
    </p>
    <p><input type="submit" value="Upload" /></p>
</form>

当我在表单中设置正确的值并单击“上传”按钮时,我总是得到:

> AttributeError at /myapp/upload/ 'CapForm' object has no attribute
> 'is_vaild'
> Request Method:   POST Request
> URL:  http://127.0.0.1:8000/myapp/upload/
> Django Version:   1.6.5
> Exception Type:   AttributeError Exception Value:  'CapForm' object
> has no attribute 'is_vaild'

我试过了:

  • print form.errors,但没有显示任何内容
  • print form.is_valid()if 之前,仍然报错
  • 删除text_part,只将request.POST传递给form,仍然报错
  • 使用form(data=request.POST, files=request.FILES),还是报错
  • print form.is_multipart() 给我一个True 结果
  • 提交一个空的或正确填写的表格都会给出同样的错误

我应该怎么做才能完成这项工作?非常感谢!

【问题讨论】:

  • 看起来你有错字:is_vaild() 不等于 is_valid()

标签: python django forms django-forms


【解决方案1】:
is_vaild != is_valid

简单的错字

【讨论】:

  • 棘手的错字。如果它发生在我身上,我永远找不到它。
  • ar.....我今天一定是太累了....要不要买一副新眼镜...
  • 呵呵 - 在糟糕的日子里,我花了好几个小时翻阅代码才发现原因是一个简单的错字 - 例如。 Django 模型属性中的拼写错误 - “为什么不更新此属性!?!?”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2021-04-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2017-10-26
相关资源
最近更新 更多