gpt4 book ai didi

django - 使用 Django CreateView 处理表单集 - 它不验证

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

问题

我正在尝试修改基于类的 View “CreateView”以处理表单集而不是表单。

当客户端发出 GET 请求时,表单集会正确显示给客户端。问题是当客户端使用 POST 提交表单时。

当 Django 接收 POST 时,它会进入 form_invalid() 状态,并且 form.errors 提示“此字段是长度和名称字段的必需字段”。

class Service(models.Model):
TIME_CHOICES = (
(15, '15 minutes'),
(30, '30 minutes'),
)
length = models.FloatField(choices=TIME_CHOICES,max_length=6)
name = models.CharField(max_length=40)

class ServiceForm(ModelForm):
class Meta:
model = Service

ServiceFormSet = modelformset_factory(Service,form=ServiceForm)

class ServiceEditView(CreateView):
template_name = "service_formset.html"
model = Service
form_class = ServiceForm
success_url = 'works/'

def form_valid(self, form):
context = self.get_context_data()
formset = context['formset']
if formset.is_valid():
self.object = form.save()
return HttpResponseRedirect('works/')
else:
return HttpResponseRedirect('doesnt-work/')

def form_invalid(self, form):
print form.errors
return HttpResponseRedirect('doesnt-work/')

def get_context_data(self, **kwargs):
context = super(ServiceEditView, self).get_context_data(**kwargs)

if self.request.POST:
context['formset'] = ServiceFormSet(self.request.POST)
else:
context['formset'] = ServiceFormSet(queryset=Service.objects.filter(user__exact=self.request.user.id))
return context

我的问题是

如何使用 createview 来处理表单集?为了让它正确验证,我缺少什么?

到目前为止,我已经获取了本教程的大部分内容 http://haineault.com/blog/155/

简而言之,到目前为止我所做的事情

由于 form.errors 变量表示每个字段都是必需的,因此我认为它需要常规表单而不是表单集 -> 我缺少一些告诉 CreateView 它是表单集的选项。

我还尝试了此处建议的解决方案:http://www.kevinbrolly.com/ .

class BaseServiceFormSet(BaseModelFormSet):
def __init__(self, *args, **kwargs):
super(BaseServiceFormSet, self).__init__(*args, **kwargs)
for form in self.forms:
form.empty_permitted = False

但这没有任何区别。

最佳答案

解决方案

pip 安装 django-extra-views

view.py中:

from extra_views import FormSetView
class ItemFormSetView(ModelFormSetView):
model = Service
template_name = 'service_formset.html'

有一个关于将其纳入 Django 核心的讨论,但讨论似乎陷入了停滞。 https://code.djangoproject.com/ticket/16256

我在哪里找到解决方案

在此存储库 https://github.com/AndrewIngram/django-extra-views有一个名为 ModelFormSetView 的 View ,它正是我所需要的。它是一个基于类的 View ,其功能与 CreateView 相同,但针对的是表单集。

关于django - 使用 Django CreateView 处理表单集 - 它不验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9870007/

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