2010-12-06 41 views
0

我試圖解決這個問題幾天,現在可以使用一點外部輸入。創建複雜的Django表格

什麼是創造這些相關模型形式的最佳方式:

STATUSES = (('1', 'Draft'), ('2', 'Active'), ('3', 'Deleted'), ('4', 'Credited')) 
class Contract(models.Model): 
    details = ForeignKey(Order) 
    status = CharField(max_length=1, choices=STATUSES) 

class Product1Order(Order): 
    items = ManyToManyField(Item) 
    # + more product specifics 

class Item(models.Model): 
    tag = ForeignKey(Tag) 
    status = CharField(max_length=1, choices=STATUSES) 
    price = PositiveIntegerField() 

我開始尋找到表單集,但我不能真正理解他們使用此點。
如果我使用ModelForms,那麼狀態字段將在ModelA和ModelC上發生衝突,如果我想在應用程序的不同頁面上顯示不同的字段,則必須將模型複製粘貼到新的模型中,並將Meta每個表單對象排除/字段?

如果有人有任何提示,我會非常感激。

回答

1

首先,這太抽象了,無法理解你想要做什麼。爲什麼有兩個狀態字段?不同的關係究竟意味着什麼?有什麼限制

其次,你對模板組感到困惑。首先,沒有辦法使用嵌套內聯表單 - 它們只適用於父級和子級之間的關係 - 您可以有多個父 - 子關係,但不能像父級 - >子級 - >孫級那樣在此處執行。但是,如果它確實有效,那麼不同地位領域之間就不會有任何衝突 - 它們在不同的模型上。

第三,沒有理由複製和粘貼任何東西。 Formset是類,因此您可以輕鬆對它們進行子類化並使用不同的exclude值,甚至可以使用帶有__init__方法的單個類,該方法需要一個額外的參數來決定要排除的字段。

+0

改變了一下例子,它有幫助嗎?對ModelForm進行子類化遠不能複製粘貼原始模型表單imho?至少不會因爲不同的排除項/字段而發生細微的更改,如果能夠在初始化時更改此值,那麼將會非常好:f = MyModelForm(exclude =('field1','field2')) – schmilblick 2010-12-06 10:31:28