gpt4 book ai didi

django - Django:构造表单后,如何在表单集中添加额外的表单?

转载 作者:行者123 更新时间:2023-12-03 14:11:57 27 4
gpt4 key购买 nike

这大致就是我要做的事情:

def post(request):
VehicleFormSet = formset_factory(StaffVehicleForm)
if request.method == 'POST':
vehicle_formset = VehicleFormSet(request.POST)
if 'add_vehicle' in request.POST:
if vehicle_formset.is_valid():
form_count = vehicle_formset.total_form_count()
vehicle_formset.forms.append(vehicle_formset._construct_form(form_count))


基本上,如果用户单击“添加”按钮并且他们的输入有效,那么我想向表单集中添加另一个空白表单,并隐藏前一个。

上面代码的问题是我不知道如何增加 total_form_count()。我现在所拥有的方式,它将运行一次,然后再次按下它,将不会发生任何事情,大概是因为 form_count是相同的。我也不喜欢调用 _construct_form并依赖内部。

最佳答案

class RequiredFormSet(BaseFormSet):
def add_form(self, **kwargs):
# add the form
tfc = self.total_form_count()
self.forms.append(self._construct_form(tfc, **kwargs))
self.forms[tfc].is_bound = False

# make data mutable
self.data = self.data.copy()

# increase hidden form counts
total_count_name = '%s-%s' % (self.management_form.prefix, TOTAL_FORM_COUNT)
initial_count_name = '%s-%s' % (self.management_form.prefix, INITIAL_FORM_COUNT)
self.data[total_count_name] = self.management_form.cleaned_data[TOTAL_FORM_COUNT] + 1
self.data[initial_count_name] = self.management_form.cleaned_data[INITIAL_FORM_COUNT] + 1

def add_fields(self, form, index):
super(RequiredFormSet, self).add_fields(form, index)
form.empty_permitted = False


这样就可以了。只花了7个小时就知道了。而且我仍然不知道为什么我需要 .is_bound = False来使初始值不固定。

关于django - Django:构造表单后,如何在表单集中添加额外的表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4950627/

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