2012-03-03 58 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 2012-03-03 17:56:54

+0

好吧,其實這就是所有的代碼:) + this:class MyAdmin(admin.ModelAdmin): form = MyAdminForm – 2012-03-03 22:15:52

+1

好的,所以你試圖在Django管理中使用表單......這使事情變得更加棘手。正如我之前所說的,您的模型表單對我來說看起來很好,並且可以定期查看。我不知道Django管理員問題出在哪裏。你可以開始挖掘['options.py'](https://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py),希望Stack Overflow的其他人知道答案,或者將其作爲您試圖在Django管理員中進行過多定製的標誌,並且現在是編寫自己的視圖的時候了。 – Alasdair 2012-03-03 22:39:00

回答

-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'對象沒有屬性'字段'。當我在循環之前初始化字段時,它也不起作用... – 2012-03-03 22:14:47

+0

還有一件事 - 這些FileFields被添加到self.fields - 我在一些核心django方法中遍歷它,並且它們在那裏。 – 2012-03-03 22:18:34