2011-08-19 40 views
0

好吧,我有一個複雜的業務邏輯,有很多複雜的形式,因此我實際上是在飛行中生成字段當表單被創建時。我需要能夠訪問模板中的字段,但當然,因爲它們已生成,所以我不能只是執行諸如{{ form.fieldname }}之類的操作,因爲在這種情況下,fieldname實際上是由變量生成的。爲django表單創建BoundFields的自定義列表/字典(模擬form.hidden_​​fields)

我試過的形式是這樣的:

def __init__(self, *args, **kwargs): 
    # initialization code is here, so let's just skip that 
    self.items = kwargs.pop("items", []) 
    self.my_fields = [] 
    for item in self.items: 
     self.fields['item_%d' % item.pk]=forms.CharField(required=True, label=item.name) 
     self.my_fields.append(self.fields['item_%d' % item.pk]) 

然而,在模板中,當我試試這個:

{% for field in self.my_fields %} 
    {{ field }} 
{% endfor %} 

我得到類似<django.forms.fields.CharField object at 0x2b08aeb45810>

是否有方法來做到這一點,所以我可以得到實際渲染的領域?

更新

貌似渲染領域有型django.forms.forms.BoundField__getitem__被稱爲field對象被創建。基本上,我想我需要一些方法來創建一些行爲像hidden_fields只包含我的領域。

回答

0

想通了。爲了確保__getitem__已被觸發,我需要設置如下字段:

def __init__(self, *args, **kwargs): 
    # initialization code is here, so let's just skip that 
    self.items = kwargs.pop("items", []) 
    self.my_fields = [] 
    for item in self.items: 
     self.fields['item_%d' % item.pk]=forms.CharField(required=True, label=item.name) 
     self.my_fields.append(self['item_%d' % item.pk])