2012-07-30 95 views
2

我想动态地将CharField更改为ChoiceField,因为我希望从当前请求确定的可能性列表中选择值。动态更改字段Django管理内联表格

在我的ModelAdmin能做到这一点与get_form(),只是说:

form.base_fields[field_name] = forms.ChoiceField(...) 

,但我该怎么做同样的InlineModelAdmin(TabularInline)? 我带台阶的贯通get_formset()和get_fieldsets(有点),但无法找到正确的位置在挂钩

回答

2

有一个get_formsets方法,你可以使用像get_form为内联。这是django.contrib.admin.options.ModelAdmin的默认版本:

def get_formsets(self, request, obj=None): 
    for inline in self.inline_instances: 
     yield inline.get_formset(request, obj) 
+0

谢谢! “formset = inline.get_formset(request,obj)”后跟“form = formset.form”,然后我就可以像在ModelAdmin中那样继续。 – 2012-07-31 09:27:45

+1

在django代码中看到的警告:“ModelAdmin.get_formsets()已被弃用,并且将在Django 1.9中被移除。使用ModelAdmin.get_formsets_with_inlines()而不是” – OriolJ 2015-09-16 09:22:59

+1

“要清楚,get_formsets将是内联类的一种方法,对吧?出于某种原因,get_formsets在这里不会被调用= / – Anoyz 2016-02-22 16:05:39

-1
+0

表单不是静态更改的,这是在运行时确定的。 InlineModelAdmin中不调用get_form()。 – 2012-07-31 07:35:57

+0

使窗体属性。但是你已经找到了解决方案。 – Willian 2012-07-31 09:49:46