2010-10-15 48 views
3

我有一個像下面這樣的模型。將多個模型添加到inlineformset_factory

class Content(SimpleModel): 
    title = models.CharField(max_length=255) 
    body = models.TextField() 
    slug = models.SlugField(max_length=50)  

    def __unicode__(self): 
     return self.title 


class MediumStuff(models.Model): 
    meta_value = models.TextField() 
    meta_key = models.SlugField('Field Name', max_length=50, blank=True) 
    content = models.ForeignKey(Content) 

    def __unicode__(self): 
     return self.slug 


class SmallStuff(models.Model): 
    text = models.CharField(max_length=60, blank=True, null=True) 
    content = models.ForeignKey(Content) 

我想要做的是爲有MediumStuff和SmallStuff型號直列形式的內容使用inlineformset_factory()

我提到Django Documentation創建表單集,但他們有一個如何使用單一的工作一個例子外鍵模型。

ContentFormSet = inlineformset_factory(Content, [MediumStuff, SmallStuff])

也不

ContentFormSet = inlineformset_factory(Content, (MediumStuff, SmallStuff))

沒有工作。

由於可以將多個內聯添加到管理員,我相信這是可以做到:)

你有什麼建議/任何資源或建議嗎? 或者可能告訴我在哪裏我應該看看管理員如何處理多個內聯?

回答

3

只要創建一個在線的每個相關型號:

MediumStuffInline = inlineformset_factory(Content, MediumStuff)

SmallStuffInline = inlineformset_factory(Content, SmallStuff)

看看管理員怎麼做。每個內聯處理由InlineModelAdmin [1]的子類處理。內聯本身是在get_formset()方法[2]上創建的。

檢查出如何在一個視圖中使用一個以上的表單集的文檔[3] [4]

[1] http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L228

[2] http://code.djangoproject.com/browser/django/trunk/django/contrib/admin/options.py#L1243

[3] http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#using-an-inline-formset-in-a-view

[4] http://docs.djangoproject.com/en/1.2/topics/forms/formsets/#using-more-than-one-formset-in-a-view

+0

這是非常有用的,我會嘗試一下,看看如何Django管理員工作!非常感謝伊戈爾! – mnmly 2010-10-16 13:57:03