2012-03-03 41 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