我不知道如何在我的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表單集合 –