Django管理内联-表单的最小数量
在Django中创建自定义模型管理内联线时,可以设置两个参数Django管理内联-表单的最小数量,django,django-admin,formset,inline-formset,Django,Django Admin,Formset,Inline Formset,在Django中创建自定义模型管理内联线时,可以设置两个参数extra和max_num:要显示的其他表单的数量,以及允许用户附加到父对象的最大对象数 我有一个问题模型,每个模型都可以有几个答案,这些答案是问题管理中的内联线。大多数问题都有三个答案,所以我想默认显示三条内联线;然而,当编辑一个已经有三个答案的问题时,在很可能根本就没有答案的情况下,显示三个额外的字段看起来既拥挤又俗气。我想要的基本上是一个min_num参数:我希望在默认情况下至少显示三个字段,如果已经有少于三个答案,则为空,同时仍
extra
和max_num
:要显示的其他表单的数量,以及允许用户附加到父对象的最大对象数
我有一个问题模型,每个模型都可以有几个答案,这些答案是问题管理中的内联线。大多数问题都有三个答案,所以我想默认显示三条内联线;然而,当编辑一个已经有三个答案的问题时,在很可能根本就没有答案的情况下,显示三个额外的字段看起来既拥挤又俗气。我想要的基本上是一个min_num
参数:我希望在默认情况下至少显示三个字段,如果已经有少于三个答案,则为空,同时仍然允许用户添加多于将显示的所有答案
我已经找到了将此添加到和的罚单,但它们似乎尚未解决。目前在Django 1.4中有什么方便的方法可以做到这一点吗?我不确定。但在我的项目中,我做到了这一点。 填写表格的计数=计数(未删除现有)+计数(已更改和未删除新)。在clean方法中,我们确保所有表单都已经过验证(并且不包含空白表单) forms.py:
有一个修补程序可用于此:
将max_num设置为3,并添加额外注释,这样在添加和更改表单中将始终有3行。我必须设置extra和min_num以使其生效
类MyInline(管理列表行):
额外=0
最小数量=3
我最后使用了一个动态额外的
值:
class AnswerInline(admin.TabularInline):
model = Answer
initial_num = 3
def get_extra(self, request, obj=None, **kwargs):
if obj is not None:
return max(self.initial_num - obj.answers.count(), 1)
return self.initial_num
这样可以确保有3个表单,或者比填充表单的数量多出一个表单,并且不会出现
min_num
已经存在的验证问题。看起来它已经被合并,现在在Django 1.7中可用<代码>\o/问题似乎没有指定3是最大值,只是通常的情况。当我这样做时,每个空表单集的每个字段上都会出现“this field is required”错误。在我的例子中,我想显示3个表单,但需要0。
class AnswersInline(admin.TabularInline):
model = Answer
fk_name = "polling"
formset = AnswerFormset # from forms.py
class PollingModelAdmin(admin.ModelAdmin):
inlines = [AnswersInline]
admin.site.register(Polling, PollingModelAdmin)
class AnswerInline(admin.TabularInline):
model = Answer
initial_num = 3
def get_extra(self, request, obj=None, **kwargs):
if obj is not None:
return max(self.initial_num - obj.answers.count(), 1)
return self.initial_num