我不知道如何在我的Django管理面板中进行一次自定义。如何在Django中添加'inline = []'之前检查对象
例如我有表test
和另一个表testinfo
。我知道admin.TabularInline
的testinfo
表在test
表中。但是如何查询,例如id
的test
表大于3,要显示TabularInline
,如果不是不显示?
我不知道如何在我的Django管理面板中进行一次自定义。如何在Django中添加'inline = []'之前检查对象
例如我有表test
和另一个表testinfo
。我知道admin.TabularInline
的testinfo
表在test
表中。但是如何查询,例如id
的test
表大于3,要显示TabularInline
,如果不是不显示?
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)
嗯,我认为你的问题是关系到这里Misleading documentation in ModelAdmin.get_inline_instances讨论了这个问题。所以基本上你的代码应该改成类似于...... #假设你有一个TestInfoInline内联继承自一个BaseModelAdmin定义的 ##类似于以下。 类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
希望这可以帮助别人......
ID不工作,我总是得到'不受约束的方法必须使用TestInfoInline实例作为第一个参数调用get_formset()(而不是WSGIRequest实例)。该怎么办? –
对不起,那完全是我的错。我更新了我的答案。 –
同样,我遇到了问题...每次我提到页面时,我都会得到2个新的TestInfoInline表单集合 –