【问题标题】:Django - partially validating formDjango - 部分验证表单
【发布时间】: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


【解决方案1】:

您是否尝试过继承AdForm 并修改内部Meta 类中的fields?像这样的:

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

来自ModelFormchanging the order of fields 的文档:

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

【讨论】:

  • 我以与您描述的方式非常相似的方式解决了它 - 只是我将 ModelForm 而不是 AdForm 子类化了。支持您的答案并接受它是正确的,因为我的解决方案几乎相同:)
  • 太好了,我很高兴这就是你要找的东西!
猜你喜欢
  • 2012-11-02
  • 1970-01-01
  • 2018-11-05
  • 2011-03-10
  • 2011-01-19
  • 2021-06-05
  • 1970-01-01
  • 2013-08-26
  • 2018-11-25
相关资源
最近更新 更多