我是Django,GAE的新手,当我尝试使用Django构建一些动态表单时遇到了一些问题。我们的想法是,从一个下拉框中进行的选择可以确定另一个字段中的值。
详细说明,如果是用户
我读了一些例子,发现了一些功能,比如“init和super应该包括在内”。因此我修改了我的代码,但它仍然无效。
我的问题是:
欢迎所有建议!
谢谢!
这是代码。
Species_CHOICES=(('178','A'),('1580','B'),('','C'))
class Inp(forms.Form):
Species = forms.ChoiceField(label='Species', choices=Species_CHOICES, initial='A')
#Here detect the choice made by the user
def get_STB_choices(Species):
if Species=='178':
r= 178
elif Species=='1580':
r= 1580
else:
r= 4440
return a
#assign values to a new parameter based on user's choice
def __init__(self, *args, **kwargs):
super(Inp, self).__init__(*args, **kwargs)
body_weight=forms.FloatField(required=True, label='Body weight', initial=get_STB_choices(Species))
#write out in HTML
class InputPage(webapp.RequestHandler):
def get(self):
html = str(Inp())
self.response.out.write(html)
答案 0 :(得分:1)
您需要在页面上运行Javascript来更新可用的选项。
我在这里实现了一种方式。每次进行选择时,页面都会发出一个AJAX请求,以获取取决于初始更改的新表单字段。
https://github.com/dragonx/django-hier-ajax-form
在我做完之后,我意识到已经有一个现有的项目做了同样的事情,但我们的实现是完全不同的:
https://github.com/digi604/django-smart-selects
顺便说一句,我相信通常当你打电话给super()时,你会把它当作当前班级的名字使用,所以我原本希望super(Inp, self).__init__(*args, **kwargs)