对is_valid如何工作感到困惑

时间:2012-08-18 20:35:30

标签: python django

我有一个视图可以验证来自表单的数据,该表单只包含有关项目的一些基本信息。我很困惑is_valid方法在阅读之后如何在这里工作 this。如果用户没有输入一些必需的字段,如名称或图像1,我希望他们在页面上看到“此字段是必需的”或具有该性质的错误。我想如果form.is_valid返回False,这些消息会自动在用户的页面上引发。或者我是否需要为我希望用户看到的每个字段指定什么错误消息?

    #view
            def sell(request):
                if request.method == "POST":
                    form = AddItem(request.POST, request.FILES)
                    if form.is_valid():
                        item = form.save(commit=False)
                        item.user = request.user
                        item.is_active = True
                        item.slug = slugify(item.name)
                        item.save()
                        return HttpResponseRedirect('thanks.html')  
                else:
                    form = AddItem()
                    return render_to_response('forsale.html', locals(), context_instance=RequestContext(request))

    #form    
        class AddItem(forms.ModelForm):
            name = forms.CharField(label="Title")


            class Meta:
                model = Item
                exclude = ('user','slug','is_active',)

#model

class Item(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=75)
    slug = models.SlugField(max_length=50, unique=True)
    is_active = models.BooleanField(default=True, blank=True)
    image1 =  models.ImageField(upload_to='img')
    image2 =  models.ImageField(upload_to='img', blank=True)
    image3 =  models.ImageField(upload_to='img', blank=True)
    image_caption1 = models.CharField(max_length=200, blank=True)
    image_caption2 = models.CharField(max_length=200, blank=True)
    image_caption3 = models.CharField(max_length=200, blank=True)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    quantity = models.IntegerField(default=1)
    description = models.TextField()
    created = models.DateTimeField(auto_now_add=True)
    shipping_price = models.DecimalField(decimal_places=2, max_digits=6)
    categories = models.ManyToManyField(Category)

1 个答案:

答案 0 :(得分:2)

您需要使用form.errors从表单对象中提取错误,然后根据需要处理dict。如果你正在使用ajax,只需将dict作为json重新发送并使用javascript来处理它。如果它是一个直接的html表单提交,那么你需要渲染并回复一个包含传递字典中错误的页面并处理模板中传递的错误(通常带有{% if errors %}标记