gpt4 book ai didi

Django:清理和验证相互依赖的表单

转载 作者:行者123 更新时间:2023-12-01 20:20:49 24 4
gpt4 key购买 nike

django 文档涵盖 cleaning and validating FIELDS that depend on each other ,但我找不到任何涵盖相互依赖的表单的内容。

我有一个 HTML 表单,其中包含标准 django 表单和 django 表单集。表单集中每个表单的正确验证完全取决于主表单中的值(例如,选中主表单上的复选框以及表单集中每个表单上的特定字段)/em> 突然变得必需)。

我的直觉是“简单地”将整个主表单传递到表单集验证调用中,如下所示:

def my_view(request):
MyFormSet = formset_factory(MyForm, extra=2, can_order=True)

if request.method == 'POST':
form = MainForm(request.POST)
formset = MyFormSet(request.POST)

if form.is_valid() and formset.is_valid(form): # <-- ?!?!
# The formset is now validated based on the form

但是,为了使其工作,我相信我必须重写表单集 is_valid() 以及底层表单 is_valid()clean () 方法。所以,它很快就会变得非常困惑。

有更好的方法吗?

最佳答案

我曾经研究过做这样的事情,本教程 http://yergler.net/blog/2009/09/27/nested-formsets-with-django/相当有帮助。

另一种方法是:

def my_view(request):
MyFormSet = formset_factory(MyForm, extra=2, can_order=True)

if request.method == 'POST':
form = MainForm(request.POST)
formset = MyFormSet(request.POST, other_form = form)

if form.is_valid() and formset.is_valid(): # <-- ?!?!
# The formset is now validated based on the form

然后

class MyFormSet(...):

def __init__(self, *args, **kwargs):
if kwargs.has_key('other_form'):
self.myformforlater = kwargs.pop('other_form')
Super(MyFormSet, self).__init__(*args, **kwargs)

这样您只需重写 init 方法,并且可以从任何验证步骤访问外部表单。

关于Django:清理和验证相互依赖的表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7058836/

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