gpt4 book ai didi

python - Django is_valid() 不适用于 modelformset_factory

转载 作者:行者123 更新时间:2023-12-01 00:00:13 27 4
gpt4 key购买 nike

我使用 modelformset_factory 创建了一个简单的联系表单,以使用数据库模型在 View 中构建表单。我遇到的问题是 save() 之前的 is_valid() 检查不起作用。当我提交带有空字段的表单时,它仍然传递 is_valid() 并尝试写入数据库。

我希望 is_valid() 检查在字段为空时失败,以便用户可以再次定向到表单并显示错误消息。我相信有一个简单的解决方案。你知道我的代码中缺少什么吗?

谢谢。

代码:

models.py

class Response(models.Model):
name = models.CharField(max_length=50,verbose_name='Your Name:')
email = models.CharField(max_length=50,verbose_name='Email:')
phone = models.CharField(max_length=50,verbose_name='Phone Number:')
apt_size = models.CharField(max_length=25,
choices=APT_CHOICES,
verbose_name='Apt Size:')
movein_at= models.DateField(verbose_name='Desired Move-In Date')
community = models.CharField(max_length=50,
choices=COMMUNITY_CHOICES,
verbose_name='Community You Are Interested In:')
referred_by = models.CharField(max_length=50,
choices=REFERRED_CHOICES,
verbose_name='Found Us Where?')
referred_other = models.CharField(blank=True,max_length=50,verbose_name='If Other:')
comments = models.TextField(verbose_name='Comments:')
created_at = models.DateTimeField(auto_now_add=True)
def __unicode__(self):
return self.name

views.py

from summitpark.contact.models import * 
from django.shortcuts import render_to_response
from django.forms.models import modelformset_factory

def form(request):
contact_form_set = modelformset_factory(Response,fields=('name','email','phone',
'apt_size','movein_at',
'community','referred_by',
'comments'),
exclude=('id'))
if request.method == 'POST':
formset = contact_form_set(request.POST)
if formset.is_valid():
formset.save()
return render_to_response('contact/confirm.html')
else:
return render_to_response('contact/form.html',{'formset':formset})
else:
formset = contact_form_set(queryset=Response.objects.none())
return render_to_response('contact/form.html',{'formset':formset}

解决方案:

class BaseContactFormSet(BaseModelFormSet):
def clean(self):
if any(self.errors):
return
for form in self.forms:
name = form['name'].data
if not name:
raise forms.ValidationError, "Please Complete the Required Fields

最佳答案

您的问题是,提供 0 个项目是有效的表单集,没有最低限度的验证。我将提供一个自定义 BaseModelFormset 子类,它的 clean() 方法仅检查至少一个对象。

关于python - Django is_valid() 不适用于 modelformset_factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1791942/

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