gpt4 book ai didi

python - 在第二个表单中访问一个表单的已清理数据

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

所以我有两个表单,Sale 和 SaleItems

SaleForm = SaleForm(request.POST or None, auto_id=False, prefix = 'SaleForm')
SaleItemsForm = modelformset_factory(
Sale, form = SaleItemsForm, formset = ItemsFormSet, extra=1, can_delete=True
)

一旦它们都获得了 POST 数据并且有效,它们就会出现在通常的语句中:

if SaleForm.is_valid() and SaleItemsForm.is_valid():
pass

当需要进行验证时,我已经取代了基本模型表单集,并希望为模型表单集编写我自己的自定义清理方法。我想在 ItemsFormSet 的 clean 方法中使用来自 SaleForm 的清理数据:

from django import forms

class ItemsFormSet(forms.models.BaseModelFormSet):
def __init__(self, *args, **kwargs):
super(ItemsFormSet, self).__init__(*args, **kwargs)

def clean(self):
super().clean()
print(TheSaleForm.cleaned_data['Value'])

这不起作用,我尝试了一些愚蠢的事情:

  • 尝试使 SaleForm 成为全局变量并在views.py 和forms.py 模块之间访问它。这是一个坏主意,现在我对模块范围有了更多的了解

  • 尝试导入实际对象,同样不聪明

我假设必须有一种方法可以做到这一点,而无需将清理后的数据保存到数据库的某个位置并在表单集的 clean 方法中再次检索它。我不确定覆盖 ItemsFormSet.is_valid() 并尝试允许传递 kwarg 字典项是否是正确的方法......但我希望有人有一个了解解决此问题的“正确”方法是什么。

最佳答案

您应该允许将数据传递到 ItemsFormSet 的 init 中,并将其保留为稍后可以引用的实例属性。

class ItemsFormSet(forms.models.BaseModelFormSet):
def __init__(self, *args, **kwargs):
self.sale_form = kwargs.pop('sale_form', None)
super(ItemsFormSet, self).__init__(*args, **kwargs)

def clean(self):
super().clean()
print(self.sale_form.cleaned_data['Value'])

现在在你看来:

if request.method == 'POST':
form = SaleForm(request.POST)
formset = SaleItemsForm(request.POST, sale_form=form)

关于python - 在第二个表单中访问一个表单的已清理数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53200364/

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