gpt4 book ai didi

python - Django 表单集 : make first required?

转载 作者:IT老高 更新时间:2023-10-28 21:48:18 28 4
gpt4 key购买 nike

这些表单集表现出的正是我想要的相反行为。

我的 View 是这样设置的:

def post(request): # TODO: handle vehicle formset
VehicleFormSetFactory = formset_factory(VehicleForm, extra=1)
if request.POST:
vehicles_formset = VehicleFormSetFactory(request.POST)
else:
vehicles_formset = VehicleFormSetFactory()

我的模板如下所示:

    <div id="vehicle_forms">
{{ vehicles_formset.management_form }}
{% for form in vehicles_formset.forms %}
<h4>Vehicle {{forloop.counter}}</h4>
<table>
{% include "form.html" %}
</table>
{% endfor %}
</div>

这样,它最初只生成 1 个表单,就像我想要的那样。但我希望需要一份表格!

当我使用 JavaScript 和 vehicles_formset.empty_form 动态添加空白表单时,所有这些额外的表单都是必需的,这是我不想要的。

来自文档:

The formset is smart enough to ignore extra forms that were not changed.

这是第一个表单展示的行为(不是我想要的),但不是额外表单展示的行为(我想要的)。

我可以更改一些属性以至少使 一个 表单成为必需的吗?

最佳答案

找到更好的解决方案:

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

然后像这样创建您的表单集:

MyFormSet = formset_factory(MyForm, formset=RequiredFormSet)

真的不知道为什么这不是一个开始的选项......但是,无论如何。我花了几个小时才弄明白。

这将使所有表格成为必需的。您可以通过将 self.forms[0].empty_permitted 设置为 False 来制作所需的第一个。

关于python - Django 表单集 : make first required?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2406537/

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