2017-04-19 46 views
1

我試圖通過表單在我的模板上的formset循環。我已經看到了這樣做的兩種不同的方式,它似乎沒有影響我的代碼,我使用哪一個。django模板標記中的formset和formset.forms之間的區別

{{ formset.management_form }} 
    {% for form in formset %} 
     {{ form }} 
     {% endfor %} 

而且......

{{ formset.management_form }} 
    {% for form in formset.forms %} 
     {{ form }} 
     {% endfor %} 

這是否有什麼區別?爲什麼要把.forms放到最後?

回答

2

按照BaseFormset類的源:

def __iter__(self): 
    """Yields the forms in the order they should be rendered""" 
    return iter(self.forms) 

@cached_property 
def forms(self): 
    """ 
    Instantiate forms at first property access. 
    """ 
    # DoS protection is included in total_form_count() 
    forms = [self._construct_form(i, **self.get_form_kwargs(i)) 
      for i in range(self.total_form_count())] 
    return forms 

這兩種方法(for form in formsetfor form in formset.forms)是相同的。

您會發現,用於for循環的__iter__每次產生self.forms。另一方面,for form in formset.forms重複了相同的事情,self.forms

+0

很好的解釋謝謝:) –

相關問題