Django - 部分验证表格

时间:2010-05-09 07:45:08

标签: python django validation

我是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()”验证它,一切都很好。

基本上对于第二次验证(另一个模板)我只想对“category”和“sub_category”进行验证:

在另一个模板中(使用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()”等验证此表单,这样就可以了。

1 个答案:

答案 0 :(得分:1)

您是否尝试过对AdForm进行子类化并修改内部fields类中的Meta?像这样:

class AdFormLite(AdForm):
    class Meta:
        fields = ['category', 'sub_category']

来自changing the order of fields上的ModelForm的文档:

  

fields属性定义了   将成为模型字段的子集   渲染,以及它们的顺序   将被渲染。将被渲染。