Django内联表单集中的初始和额外关系如何?

时间:2014-07-30 20:35:25

标签: django inline-formset

Django文档说"如上所示,您可以定义额外表单的数量。这意味着您要告诉formset除了从初始数据生成的表单数量之外还要显示多少其他表单。" 来源here

然而,(至少)使用内联表单集,似乎并非如此。看起来extra参数确定了表单的总数。如果我写extra=0我根本没有任何表格可以显示,extra=1我只会得到第一个,依此类推。好像你必须设置额外的初始数据的长度(不是很干,是吗?)

人们做同样事情的一些例子(extra=len(myinitial)):

问题是:我是否遗漏了文档中的任何内容或为什么这有意义?

请注意。我没有包含源代码,因为我使用django-extra-views进行开发会增加示例代码的复杂性。尽管如此,周围的几个例子似乎指向同一件事。 (我不确定我以前的项目做了什么,但我认为我遇到了与普通内联表单集相同的问题。)

2 个答案:

答案 0 :(得分:1)

关于model formsets(和内联表单集)的Django文档:

  

与常规表单集一样,通过在实例化modelformset_factory返回的模型formset类时指定初始参数,可以为表单集中的表单指定初始数据。但是,对于模型表单集,初始值仅适用于额外的表单,即未绑定到现有对象实例的表单。

我注意到了相同的行为,至少对于Django 1.4和使用模型表单集。我认为文档需要改进。

另外,我发现了这个相关的错误here

答案 1 :(得分:0)

extra在此结构中很有用(放入admin.py中)

from django.contrib import admin
from guardian.models import UserObjectPermission

class InlineUserObjectPermission(admin.TabularInline):
    model = UserObjectPermission
    extra = 0

_inlines_ = [  InlineUserObjectPermission ]

class MyUserAdmin(UserAdmin):
    model = MyUser
    inlines = _inlines_

admin.site.register(MyUser, MyUserAdmin)

有了这个,对于Django管理页面中的任何MyUser页面,您都会在页面底部看到与该用户相关联的UserObjectPermission,以及一些额外的空行如果愿意,可以编译; extra控制将有多少多余的行为空。