gpt4 book ai didi

python - Django - 部分验证表单

转载 作者:行者123 更新时间:2023-12-01 06:16:56 26 4
gpt4 key购买 nike

我是 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()”等验证此表单,效果很好。

最佳答案

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

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

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

The fields attribute defines the subset of model fields that will be rendered, and the order in which they will be rendered.will be rendered.

关于python - Django - 部分验证表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2796982/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com