0

まず第一に:私はこの質問の適切なタイトルを見つけることができません。

とにかく質問は:

テンプレートでフォームに入力する必要があり、このフォームのフィールドはユーザーによって異なります。たとえばinteger、パラメータとしてメソッドに(整数はデータ型ではありません)渡すと、次のように返されます。

fileds = forms.IntegerField()

合格boolすると、次のようになります。

fields = forms.BooleanField()

それらを使用してフォームを作成できるようにします。このコードで試しましたが、文字列の形式に戻ります。

Some.pyファイル:

choices = (('bool','BooleanField()'),
            ('integer','IntegerField()'))
def choose_field():
   option = 'bool' # Here it is hardcoded but in my app it comes from database.
   for x in choices:
      if x[0]==option:
         type = x[1]
   a = 'forms'
   field = [a,type]
   field = ".".join(field)
   return field

フィールドを印刷すると、印刷され'forms.BooleanField()'ます。私もこの戻り値を使用しますが、機能しませんでした。この問題に対するエイミーの解決策は?

4

1 に答える 1

2

最も簡単な方法は、フォームクラスを作成し、それに可能なすべての選択肢のフィールドを含めることです。次に、このクラスにコンストラクターを記述し、表示したくないフィールドを非表示にします。コンストラクターは、必要なフィールドを示すパラメーターを受け取る必要があります。このパラメーターをフォームに保存し、cleanメソッドで使用して、このパラメーターに従って収集されたデータを修正すると便利な場合があります。

class Your_form(forms.ModelForm):
  field_integer = forms.IntegerField()
  field_boolean = forms.BooleanField()

  def __init__(self, *args, **kwargs):
    option = kwargs["option"]
    if option == "integer":
      field_boolean.widget = field_boolean.hidden_widget()
    else:
      field_integer.widget = field_integer.hidden_widget()
    super(Your_form, self).__init__(*args, **kwargs)

コントローラ内:

option = 'bool'
form = Your_form(option=option)
于 2012-06-17T09:34:56.567 に答える