2010-10-15 74 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