我想弄清楚只有在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