2012-03-15 50 views
1

我是Django,GAE的新手,並且在嘗試使用Django構建一些動態表單時遇到了一些問題。這個想法是,從一個下拉框中進行的選擇決定了另一個字段的值。由GAE主持的Django中的動態表格

詳細地,如果一個用戶

  1. 選擇「物種」,「A」,然後在「body_weight」的值將是178。類似地,
  2. 如果他選擇「B」「物種」,在值‘body_weight’是1580,和
  3. 如果選擇‘C’中的‘種’,在他可以填寫‘body_weight’

我看了一些例子,並發現了一些功能像「初始化,超級應該包括在內」。因此我修改了我的代碼,但它仍然無效。

我的問題是:

  1. 什麼,是把 「INIT」 和 「超級」 正確的位置?
  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) 

回答

1

您將需要運行在頁面上的Javascript來更新可用的選擇。

我在這裏實現了一種方法。每次進行選擇時,頁面都會發出AJAX請求以獲取依賴於初始更改的新表單字段。

https://github.com/dragonx/django-hier-ajax-form

我做了礦難發生後,我意識到,有已經是做了同樣的事情,現有的項目,但我們的實現是相當不同:

https://github.com/digi604/django-smart-selects

順便說一句,我通常當相信你叫超級()你用它與當前類的名稱,所以我會有預期

super(Inp, self).__init__(*args, **kwargs)  
+0

謝謝你,他LP,但是這可以在不導入Ajax的情況下完成? – 2012-03-16 17:33:42

+0

我相信丁字褲的問題比這更簡單:給定幾個可能的用戶輸入之一,如何使用Django表單在模型中存儲不同的對應值(而不是輸入本身)? – 2012-03-16 19:01:29

+0

@丹桑德森,你是對的。我的目的是保存並顯示(需要即時網頁刷新)兩個輸入,第一個來自用戶的選擇,另一個取決於前一個。將來,我會將這些輸入發送到基於雲的SQL。那麼建議?謝謝! – 2012-03-16 20:05:12