Django modelAdmin __init__ и inlines - PullRequest
       2

Django modelAdmin __init__ и inlines

2 голосов
/ 14 сентября 2010

Привет, я довольно новичок в Django, и я хочу динамически редактировать переменные класса администратора (полная идея - скрыть строки при добавлении и показывать только при редактировании, но здесь я рассмотрю проблему).

Может кто-нибудь объяснить, почему это не работает?

class dbTablePermissionInline(admin.TabularInline):
    model = dbPermission

class adminDbTable(admin.ModelAdmin):

    inlines = [
        dbTablePermissionInline,
    ]

    def __init__(self, *args, **kwargs):
        super(adminDbTable,self).__init__(*args, **kwargs)
        self.inlines = []

когда я выбрасываю assert (assert False, self.inlines) над self.inlines = [], он правильно показывает inlines, но inline все еще появляются? Даже если я опустошил список.

Помогает по достоинству! Спасибо.

Ответы [ 2 ]

11 голосов
/ 14 сентября 2010

Метод ModelAdmin s __init__ создает экземпляры встроенных административных классов и добавляет их к self.inline_instances.Поэтому установка self.inlines на другое значение впоследствии ничего не изменит.Вы должны найти этот пост , который имеет дело с подобной проблемой, очень полезен!

Также нет смысла устанавливать такие значения в __init__, поскольку экземпляр Modeladmin создается один разможет сохраняться для более чем одного запроса!

1 голос
/ 14 сентября 2010

Я бы предложил создать пользовательский шаблон, который скрывает встроенные строки, когда операция «создайте новый foo».

Шаблоны администратора очень легко переопределить глобально или для каждого объекта.Это намного лучше, чем переопределение методов и свойств ModelAdmin в __init__().

...