Django Admin: настройка list_display условно - PullRequest
0 голосов
/ 21 марта 2011

Есть ли какой-либо метод модели администратора, такой как get_list_display (), или каким-то образом у меня могут быть некоторые условия для установки различных значений list_display?

class FooAdmin (model.ModelAdmin):
    # ...
    def get_list_display ():
        if some_cond:
            return ('field', 'tuple',)
        return ('other', 'field', 'tuple',)

Ответы [ 2 ]

0 голосов
/ 21 марта 2011

Вы хотите переопределить метод changelist_view класса admin.ModelAdmin:

def changelist_view(self, request, extra_context=None):
  # just in case you are having problems with carry over from previous
  # iterations of the view, always SET the self.list_display instead of adding
  # to it

  if something:
    self.list_display = ['action_checkbox'] + ['dynamic_field_1']
  else:
    self.list_display = ['action_checkbox'] + ['dynamic_field_2']

  return super(MyModelAdminClass, self).changelist_view(request, extra_context)

'action_checkbox' - это то, что django использует для отображения флажка слева для раскрывающегося списка действий, поэтому убедитесь, что вы включили его в настройку self.list_display. Как обычно, если вы просто устанавливаете list_display для класса ModelAdmin, обычно вам не нужно его включать.

0 голосов
/ 21 марта 2011

Вы пытались сделать это свойство?

class FooAdmin(admin.ModelAdmin):
    @property
    def list_display(self):
        if some_cond:
            return ('field','tuple')
        return ('other','field','tuple')

У меня нет, но оно может сработать.

Я также вполне уверен, что вы могли бы написать его по буквам:

class FooAdmin(admin.ModelAdmin):

    if CONDITION:
        list_display = ('field','tuple')
    else:
        list_display = ('other','field','tuple')

Но этот будет запускать проверку только во время интерпретации класса FooAdmin: но если вы основывали тест на настройках. Например, SOME_VALUE, он может работать.

Примечание такжечто self в первом примере является экземпляром класса FooAdmin, а не самим Foo.

...