我想弄清楚只有在Person.is_member爲True時才顯示以下RelativeInline的方法。在Django admin中有條件內聯?
當前admin.py:
class RelativeInline(admin.TabularInline):
model = Relative
fk_name = 'member'
class PersonAdmin(admin.ModelAdmin):
inlines = [RelativeInline,]
ordering = ('first_name',)
list_filter = ('is_member',)
search_fields = ('first_name', 'last_name',)
date_hierarchy = 'member_date'
list_display = ('first_name', 'last_name', 'is_member', 'member_date', 'photo')
admin.site.register(Person, PersonAdmin)
我已經能夠找到的唯一的暗示是,我也許能覆蓋get_formset,但我無法找到一個很好的例子,所以我的愚蠢的嘗試沒有工作。
這裏是我的失敗嘗試:
class RelativeInline(admin.TabularInline):
model = Relative
fk_name = 'member'
class PersonAdmin(admin.ModelAdmin):
ordering = ('first_name',)
list_filter = ('is_member',)
search_fields = ('first_name', 'last_name',)
date_hierarchy = 'member_date'
list_display = ('first_name', 'last_name', 'is_member', 'member_date', 'photo')
def get_formset(self, request, obj=None, **kwargs):
if obj.is_member:
inlines = [RelativeInline,]
return super(PersonAdmin, self).get_formset(request, obj, **kwargs)
admin.site.register(Person, PersonAdmin)
有沒有這個代碼產生的錯誤,但無論Person.is_member是否是真還是假沒有內嵌出現。
更新: 一個朋友建議我嘗試改變:
inlines = [RelativeInline,]
到:
self.inlines = [RelativeInline,]
,但無濟於事。我也試過:
PersonAdmin.inlines = [RelativeInline,]
但結果是一樣的 - 沒有錯誤,沒有內聯。
更新2014年的Django 1.6:在self.get_inline_instances '內聯(請求,OBJ):' – imposeren 2014-10-10 11:29:09