开发者

Django modelAdmin __init__ and inlines

Hey, I'm fairly new to Django, and I'm looking to edit admin class variables dynamically (The full idea is to hide inlines on adding and only show on editing, but I'm distilling the issue here).

Could someone explain why this doesn't work?

class dbTablePermissionInline(admin.TabularInline):
    model = dbPermission

class adminDbTable(admin.ModelAdmin):

    inlines = [
        dbTablePermissionInline,
    ]

    def __init__(self, *args, **kwargs):
        super(adminDbTable,self).__init__(*args, **kwargs)
        self.in开发者_运维知识库lines = []

when I throw an assert (assert False, self.inlines) above self.inlines = [] it correctly shows the inlines, but the inlines are still appearing? Even though I've emptied the list.

Helps appreciated! Thanks.


The ModelAdmins __init__ method creates instances of the inline admin classes and adds them to self.inline_instances. So setting self.inlines to another value afterwards doesn't change anything. You should find this post, that deals with a similiar problem very helpful!

It also makes no sense to set values like that in __init__, since the Modeladmin instance is created once and may persist for a lot more than one request!


I would suggest making a custom template which hides inlines when the operation is "create new foo".

Admin templates are very easy to override globally or per-object. It is a lot nicer than overriding ModelAdmin methods and properties in __init__().

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜