2011-07-13 59 views
9

是否有一種常見方法/最佳實踐/任何方法來組合跨越多個相關模型的表單?Django - 結合相關模型的表單

我想在同一頁面上創建/編輯模型對象以及其他相關模型對象。基本上,能夠創建/編輯一個模型實例和另一組與外鍵相關的模型實例。

不是一個很好的解釋,我知道。

class Person(models.Model): 
    name = models.CharField(max_length=64, unique=True) 

class PhoneNumber(models.Model): 
    person = models.ForeignKey(Person) 
    description = models.CharField(max_length=64, blank=True, null=True) 
    number = models.CharField(max_length=32, blank=True, null=True) 

我希望能夠使用單個表單/頁面創建/編輯一個人及其所有關聯的電話號碼。

我已經使用this nested form之前做過這個例子,但它看起來相當ha。。

回答

8
+0

inlineformset_factory給出了一個formset,可以讓我編輯PhoneNumbers,但不能關聯Person。如果我將一個PersonForm和PhoneNumberFormset(來自工廠)一起捆綁到上下文中,我是否仍然可以在同一頁面上修改它們,並使用save()爲它們正確工作? –

+3

是的,將表單和formset傳遞給頁面,然後將它們放在同一個表單中,然後在你的視圖中檢查form.is_valid()和formset.is_valid(),然後執行form.save()和formset.save ()。如果字段名稱中有任何重疊,則可能必須在定義表單時添加前綴參數。我會看看我的操作系統代碼作爲例子。 –

+0

應該指出,對於所有意圖和目的,這是django.contrib.admin如何處理這種情況。 –