【问题标题】:Dynamic forms in Django hosted by GAE由 GAE 托管的 Django 中的动态表单
【发布时间】:2012-03-15 22:12:25
【问题描述】:

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

详细来说,如果一个用户

  1. 在“Species”中选择“A”,则“body_weight”中的值为178。同理,
  2. 如果他在“物种”中选择“B”,“体重”中的值为1580,并且
  3. 如果在“物种”中选择“C”,他可以填写“body_weight”

我阅读了一些示例,发现了一些功能,例如“应该包含 init 和 super”。因此我修改了我的代码,但它仍然没有工作。

我的问题是:

  1. 放置“init”和“super”的正确位置是什么?
  2. 这里需要“self.field”吗?

欢迎所有建议!

谢谢!

这里是代码。

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)

【问题讨论】:

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


    【解决方案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)    
    

    【讨论】:

    • 感谢您的帮助,但是不导入Ajax可以完成吗?
    • 我相信 thong 的问题比这更简单:给定几个可能的用户输入之一,如何使用 Django 表单在模型中存储不同的对应值(不是输入本身)?
    • @Dan Sanderson,你是对的。我的目的是保存并显示(需要立即刷新网页)两个输入,第一个来自用户的选择,另一个取决于前一个。将来,我会将这些输入发送到基于云的 SQL。所以建议?谢谢!
    • 即使你不使用 AJAX 来获取新值,你仍然需要 Javascript 来动态更新页面。
    • 您可以更新表单的 save() 函数以根据输入保存新值。但如果没有 Javascript,您将无法在输入数据时更新网页。
    猜你喜欢
    • 2020-12-11
    • 2012-03-23
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多