我想用“房间”字段创建表单,它是整数字段。根据房间的数量,我想为每个房间“ extra_adult”和“ extra_children”生成另外两个字段。根据孩子的数量,我想生成“ children_age”字段。
我是Python和Django的新手,我曾尝试在DYNAMIC FORM GENERATION帖子上做类似的文章,但在这里遇到了几个问题:
1)我global name 'rooms' is not defined
在forms.py中有一个错误;
2)应该怎么到cleaned_data
为extra_adult
,extra_children
,extra_children_age
字段;
3)根据孩子的数量如何添加extra_children_age字段。
这是我的form.py
class RoomsForm(forms.Form):
rooms = forms.IntegerField(label=(min_value=1 )
def __init__(self, *args, **kwargs):
extra_adult = kwargs.pop('extra_adult', 0)
extra_children = kwargs.pop('extra_children', 0)
super(HotelForm, self).__init__(*args, **kwargs)
for room in rooms:
self.fields['adult_%s' % room] = forms.IntegerField(min_value=1 )
self.fields['children_%s' % room] = forms.IntegerField(label=(required=False )
views.py
def bookingForm(request):
if request.method == 'POST':
form = HotelForm(request.POST, extra_a=request.POST.get('extra_adult'), extra_c=request.POST.get('extra_children'))
if form.is_valid():
rooms = form.cleaned_data['rooms']
print "form is valid"
else:
form = HotelForm()
return render(request, 'booking/booking.html', { 'form': form })
感谢您的帮助。
您的代码需要大量改进,我无法为您编写全部内容,但是显然有些地方似乎是错误的:
您的表单字段定义似乎很奇怪:rooms = forms.IntegerField(label=(min_value=1 )
,请看一些修复它的示例。
您的第一个错误是因为没有rooms
在构造函数中定义变量。同样,您不能仅仅从这样的字段中获取价值rooms
,所有表单字段都同时填写和提交,因此字段之间无法相互引用。您可能需要单独的表格才能获取房间信息。
您尝试这样做kwargs.pop()
,但是您以错误的方式向表单提供了额外的数据。要使其正常工作,您应该执行以下操作:
form = HotelForm(request.POST, extra_adult=1, extra_children=2)
您看到的示例有点误导性,不应为这些参数提供request.POST.get
数据,而应为其他参数提供数据,这就是为什么我建议您以其他形式提供房间信息的原因。一旦有了,将结果输入第二种形式就容易得多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句