2012-07-30 97 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