由GAE主持的Django中的动态表单

时间:2012-03-15 22:12:26

标签: django google-app-engine django-forms

我是Django,GAE的新手,当我尝试使用Django构建一些动态表单时遇到了一些问题。我们的想法是,从一个下拉框中进行的选择可以确定另一个字段中的值。

详细说明,如果是用户

  1. 在“Species”中选择“A”,然后“body_weight”中的值将为178.同样,
  2. 如果他在“物种”中选择“B”,则“body_weight”中的值为1580,并且
  3. 如果在“物种”中选择“C”,他可以填写“body_weight”
  4. 我读了一些例子,发现了一些功能,比如“init和super应该包括在内”。因此我修改了我的代码,但它仍然无效。

    我的问题是:

    1. 放置“ init ”和“super”的正确位置是什么?
    2. 我需要“self.field”吗?
    3. 欢迎所有建议!

      谢谢!

      这是代码。

      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)
      

1 个答案:

答案 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)