我不知道如何在我的Django管理面板中进行一次自定义。
例如,我有表test
和另一个表testinfo
。我知道如何在admin.TabularInline
表中制作testinfo
test
表。但是,如果id
test
表的TabularInline
大于3,则如何检查{{1}},如果不显示?
答案 0 :(得分:1)
ModelAdmin
有a method called get_inline_instances()
可用于实现此效果。
class TestAdmin(admin.ModelAdmin):
def get_inline_instances(self, request, obj=None):
if obj.id > 3:
self.inlines = [TestInfoInline, ]
else:
self.inlines = []
return super(TestAdmin, self).get_inline_instances(request, obj)
第二个例子 - 效果保持完全相同:
class TestAdmin(admin.ModelAdmin):
inlines_foo = []
inlines_bar = [TestInfoInline, ]
def get_inline_instances(self, request, obj=None):
self.inlines = self.inlines_foo if obj.id <= 3 else self.inlines_bar
return super(TestAdmin, self).get_inline_instances(request, obj)
答案 1 :(得分:0)
我认为您的问题与此处讨论的问题Misleading documentation in ModelAdmin.get_inline_instances有关。所以基本上你的代码应该改为...... #假设您有一个继承自定义的BaseModelAdmin的TestInfoInline内联 #与下面类似。 class TestInfoInline(admin.StackedInline): #相关的东西在这里...... ...
class TestAdmin(admin.ModelAdmin):
def get_inline_instances(self, request, obj=None):
inlines = []
if obj.id > 3:
for inline_class in self.inlines:
# Instanciate inline object
inline = inline_class(self.model, self.admin_site)
inlines.append(inline)
return inlines
希望这有助于某人...