我有一个视图可以验证来自表单的数据,该表单只包含有关项目的一些基本信息。我很困惑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)
答案 0 :(得分:2)
您需要使用form.errors
从表单对象中提取错误,然后根据需要处理dict。如果你正在使用ajax,只需将dict作为json重新发送并使用javascript来处理它。如果它是一个直接的html表单提交,那么你需要渲染并回复一个包含传递字典中错误的页面并处理模板中传递的错误(通常带有{% if errors %}
标记