2012-03-03 6 views
2

私はこの問題を解決しようとしている壁に頭を打ち負かすのに過去24時間を費やしました。私はすでにこのボードに少なくとも10の類似の質問があることを知っています。なぜ私はまだ尋ねているのですか?まあ、解決策がないようです:)。コードは次のとおりです。Django - フォーム上のフィールドの動的数

class MyAdminForm(forms.ModelForm): 
    some_field = forms.CharField() 

    def __init__(self, *args, **kwargs): 
     super(MyAdminForm, self).__init__(*args, **kwargs) 

     for i in range(0, 10): 
      self.fields['file_field_%d' % i] = forms.FileField() 

このコードはsome_fieldのみをレンダリングします。私が10のファイルフィールドを追加しているかどうか気にしていないようです。 Django ver 1.3.1

+0

それは私には大丈夫です。モデルフォームを表示するために使用しているコードを含めるように質問を更新できますか? – Alasdair

+0

これはすべて実際のコードです:) + this:class MyAdmin(admin.ModelAdmin): form = MyAdminForm –

+1

これで、Djangoの管理者のフォームを使用しようとしています。私が前に言ったように、あなたのモデルフォームは私にとってはうまく見え、通常の見方で働くでしょう。私はDjangoの管理者にどこに問題があるのか​​わかりません。あなたは['options.py'](https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py)を掘り起こすことができ、スタックオーバーフローの誰かが答えを知っていることを願っていますあなたがDjango管理者であまりにも多くのカスタマイズをしようとしていることを示す印として、あなた自身のビューを書く時です。 – Alasdair

答えて

-1

基本クラスの__init__()を呼び出す前にフィールドを追加すると効果があります。

class MyAdminForm(forms.ModelForm): 
    some_field = forms.CharField() 

    def __init__(self, *args, **kwargs): 
     for i in range(0, 10): 
      self.fields['file_field_%d' % i] = forms.FileField() 

     super(MyAdminForm, self).__init__(*args, **kwargs) 

フォームのすべてのインスタンス内のフィールドの可変数を必要としない場合は、唯一のbase_fieldsクラスのプロパティを変更することは、あまりにも動作するはずです。

class MyAdminForm(forms.ModelForm): 
    some_field = forms.CharField() 

for i in range(0, 10): 
    MyAdminForm.base_fields['file_field_%d' % i] = forms.FileField() 
+0

「MyAdminForm」オブジェクトに属性「フィールド」がありません。ループの前にフィールドを初期化すると、それもうまくいきませんでした。 –

+0

もう1つ - これらのFileFieldsがself.fieldsに追加されています - いくつかのコアdjangoメソッドでループしました。 –

関連する問題