【发布时间】:2011-02-17 07:50:16
【问题描述】:
我是 Django 新手,正在尝试处理一些表单。 我有这个表格用于在一个模板中输入信息(创建新广告):
class Ad(models.Model):
...
category = models.CharField("Category",max_length=30, choices=CATEGORIES)
sub_category = models.CharField("Subcategory",max_length=4, choices=SUBCATEGORIES)
location = models.CharField("Location",max_length=30, blank=True)
title = models.CharField("Title",max_length=50)
...
-----------------------------------
class AdForm(forms.ModelForm):
class Meta:
model = Ad
...
我用“is_valid()”验证它,一切都很好。
基本上对于第二次验证(另一个模板),我只想针对“类别”和“子类别”进行验证:
在另一个模板中(使用 views.py 中的另一种方法),我想使用来自同一表单的 2 个字段(“category”和“sub_category”)来过滤信息 - 现在“is_valid()”方法不会工作正常,因为它验证了整个表单,我只需要验证 2 个字段。我尝试了以下方法:
...
if request.method == 'POST': # If a filter for data has been submitted:
form = AdForm(request.POST)
try:
form = form.clean()
category = form.category
sub_category = form.sub_category
latest_ads_list = Ad.objects.filter(category=category)
except ValidationError:
latest_ads_list = Ad.objects.all().order_by('pub_date')
else:
latest_ads_list = Ad.objects.all().order_by('pub_date')
form = AdForm()
...
但它不起作用。
编辑: 通过添加解决它:
class FilterForm(forms.ModelForm):
class Meta:
model = Ad
fields = ('category', 'sub_category')
并使用“is_valid()”等验证此表单,效果很好。
【问题讨论】:
-
“它不起作用”通常不能很好地描述问题。是否有错误或者它只是做了一些超出你预期的事情?它有什么作用?
标签: python django validation