2016-11-29 66 views
1

我有我認爲是足夠普遍的情況,但看起來似乎無法擺脫困境。我用django.forms.inlineformset_factory來創建一個表單的formset,它允許用戶改變一個外鍵對象的方面,並且這些工作正常。如何在django內聯表單中標記表單實例?

問題是我希望能夠在formset(注意,不是每個表單中的字段,而是每個表單所基於的外鍵模型)中標記每個這些表單。例如,如果我調整的文檔的例子:

from django.db import models 
from django.forms import inlineformset_factory 

class Author(models.Model): 
    name = models.CharField(max_length=100) 

class Book(models.Model): 
    author = models.ForeignKey(Author, on_delete=models.CASCADE) 
    title = models.CharField(max_length=100) 
    pages = models.IntegerField(default=0) 

創建我的表單集,讓人們通過達菲鴨改變任何一本書的頁數:

BookFormSet = inlineformset_factory(Author, Book, fields=('pages',)) 
author = Author.objects.get(name='Daffy Duck') 
formset = BookFormSet(instance=author) 

說達菲已經寫五本書,它們顯示爲整體條目,全部標記爲「頁面」,沒有提及每本書指向哪本書。我怎樣才能用書的標題來標記表格,以便他們知道他們正在改變哪一個?我試過將字典傳遞給inlineformset_factory函數的labels字段,但它不起作用。

回答

1

首先,請注意內聯formset是圍繞模型formset的小包裝,所以適用於後者的大部分適用於前者。而模型formset是一種呈現每個與模型實例相關的一組表單的方法。所以你正試圖一次考慮幾個抽象層次。

接下來,請參閱文檔「Using a formset in views and templates」,它描述了書寫自己的模板來渲染表單集:

<form method="post" action=""> 
    {{ formset.management_form }} 
    <table> 
     {% for form in formset %} 
     {{ form }} 
     {% endfor %} 
    </table> 
</form> 

所以,如果你要標註各種形式 - 記住,每個人本身就是一個ModelForm描述一個模型實例 - 您可以在{% for %}區塊內訪問該表單:

<form method="post" action=""> 
    {{ formset.management_form }} 
    <table> 
     {% for form in formset %} 
     <tr><th>{{ form.instance.foo_field }}</th></tr> 
     {{ form }} 
     {% endfor %} 
    </table> 
</form> 
+0

感謝您的快速回復@bignose!對不起(繼續)如此密集,但我該如何分配whatever_attribute_you_like?我使用默認的inlineformset_factory而沒有指定中間表單,並且在我的模板中只使用{{form.title}}'(保持與我的上面的關係)不起作用? – keri

相關問題