Администратор Django, скройте модель

На уровне корневой страницы администраторского сайта, где зарегистрированные модели появляются, я хочу скрыть несколько моделей, которые регистрируются администратору Django.

Если я непосредственно нерегистрирую их, я не могу добавить новые записи как добавление нового символа "+" dissapears.

Как это может быть сделано?

75
задан Hellnar 12 March 2010 в 09:45
поделиться

3 ответа

Уродливое решение: переопределить шаблон индекса администратора, т.е. скопировать index.html из django в ваш /admin/index.html и добавьте что-то вроде этого:

{% for for model in app.models %}
    {% ifnotequal model.name "NameOfModelToHide" %}
    ...
1
ответ дан 24 November 2019 в 11:35
поделиться

У меня та же проблема, вот что я придумал.

Как и в предыдущем решении - скопируйте index.html из django в свой /admin/index.html и измените его следующим образом:

{% for model in app.models %}
    {% if not model.perms.list_hide %}
    <tr>
    ...
    </tr>
    {% endif %}
{% endfor %}

И создайте подкласс ModelAdmin:

class HiddenModelAdmin(admin.ModelAdmin):
    def get_model_perms(self, *args, **kwargs):
        perms = admin.ModelAdmin.get_model_perms(self, *args, **kwargs)
        perms['list_hide'] = True
        return perms

Теперь любая модель, зарегистрированная в подклассе HiddenModelAdmin, не будет отображаться в списке админки, но будет доступна через символ "плюс" подробнее:

class MyModelAdmin(HiddenModelAdmin):
    ...

admin.site.register(MyModel, MyModelAdmin)
22
ответ дан 24 November 2019 в 11:35
поделиться

В Django 1.2 добавлены новые операторы if, что означает, что желаемая функция может быть получена только путем перезаписи admin / index.html

{% if model.name not in "Name of hidden model; Name of other hidden model" %}
    ...
{% endif %}

. Это плохое решение, потому что оно не заботится о многоязычные админы. Конечно, вы можете добавить названия моделей на всех поддерживаемых языках. Это хорошее решение, потому что оно не перезаписывает более одного аспекта основных функций Django.

Но прежде чем что-либо менять, я думаю, люди должны подумать об этом ...

По сути, проблема связана с тем, что у вас есть модели, которые нельзя использовать больше, чем добавление опции в раскрывающийся список один раз в пока. Это можно эффективно обойти, создав набор разрешений для «не очень продвинутых» пользователей, которые паникуют, когда моделей слишком много. Если требуются изменения в конкретных моделях, можно просто войти в систему с «расширенной учетной записью».

0
ответ дан 24 November 2019 в 11:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: