2012-03-15 9 views
1

私はDjango、GAEの初心者です.Djangoを使用していくつかの動的フォームを作成しようとしています。考え方は、1つのドロップダウンボックスからの選択が別のフィールドの値を決定するということです。具体的にはGAEでホストされているDjangoの動的フォーム

、ユーザ

  1. 彼は」の「B」を選択した場合、次に「body_weight」の値は同様に178、
  2. なり、「種」の「A」を選択した場合種」、の値 『body_weight』は1580年で、
  3. 選択した場合は 『種』の 『C』を、彼は埋めることができ、 『body_weight』

私はいくつかの例を読み、いくつかの機能を発見しました「init」や「super」を含める必要があります。したがって、コードを変更しましたが、それでも機能しませんでした。

私の問題は、次のとおりです。

  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()を呼び出すので、私は期待していたでしょう

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

あなたのためにありがとうlpですが、これはAjaxをインポートせずに終了できますか? –

+0

私は親指の質問がこれより簡単だと信じています:いくつかの可能なユーザ入力の1つを与えられた場合、Djangoフォームを使って、モデルに異なる対応する値(入力そのものではありません) –

+0

@ダン・サンダーソン、そうです。私の目的は、2つの入力(最初のものはユーザーの選択に由来し、もう1つは前のものに依存する)を保存して表示することです(Webページを即座にリフレッシュする必要があります)。将来、これらの入力をクラウドベースのSQLに送信します。だから提案?ありがとう! –

関連する問題