Настраиваемая панель администратора, отображающая определенные экземпляры модели

Я создаю веб-сайт с помощью Django (+ django-grappelli + мезонин) и хочу настроить свою панель администратора, чтобы добавить новую панель управления, отображающую определенные экземпляры модели.

Допустим, у меня есть модель:

class Thing(models.Model):
    published = models.BooleanField(default=False)

И несколько экземпляров модели (например, T1, T2, T3, где публикуются T1 и T2, но не T3), и я хотел бы иметь панель мониторинга, отображающую список всех неопубликованных экземпляров «Thing». (в данном случае Т3).

Любые идеи? Спасибо за чтение !


person Jerome    schedule 10.07.2014    source источник


Ответы (2)


Хорошо, я нашел решение. Вот рекомендации:

Mezzanine позволяет пользователям настраивать свою информационную панель, предоставляя функцию и регистрируя ее как тег включения.

Документация: http://mezzanine.jupo.org/docs/admin-customization.html -> Панель инструментов https://docs.djangoproject.com/en/1.7/howto/custom-template-tags/#inclusion-tags

Чтобы реализовать такую ​​функцию, вам необходимо выполнить следующие шаги:

1) Добавьте в свое приложение папку templatetags (не забудьте файл __init__.py) и создайте внутри этого пакета файл с именем your_tags.py.

2) В этом новом файле добавьте функцию для предоставления данных на новую информационную панель, которую вы хотите добавить на панель информационной панели. Это может выглядеть так:

from mezzanine import template
from your_app.models import Thing

register = template.Library()
@register.inclusion_tag('unpublished_things.html')
def show_unpublished_things():
    plugins = Thing.objects.filter(published=False)
    return {'things':things}

3) Затем вам нужно создать файл «unpublished_things.html», используемый в теге включения, например, создайте такой файл в папке шаблонов вашего приложения. Файл может выглядеть следующим образом (при условии, что в модели вещи есть функция «get_admin_url»):

{% load i18n %}

<div class="group-collapsible">
    <div class="module">
    <table>
        <caption>Unpublished things</caption>
        {% for thing in things %}
        <tr>
            <th scope="row" width="100%"><a
                    href="{{ thing.get_admin_url }}">{{ thing.name }}</a></th>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
        {% endfor %}
    </table>
    </div>
</div>

4) Чтобы закончить, вам просто нужно добавить следующее в ваш local_settings.py (или settings.py):

DASHBOARD_TAGS = (
    ("your_tags.show_unpublished_things", "mezzanine_tags.app_list"),
    ("comment_tags.recent_comments",),
    ("mezzanine_tags.recent_actions",),
)

Эта конфигурация автоматически добавит сгенерированный материал, предоставленный функцией «show_unpublished_things», вверху первой строки на панели инструментов вашей панели администратора.

Не забудьте перезапустить сервер, если у вас возникнет ошибка!

person Jerome    schedule 11.07.2014

Похоже, вам нужен ModelAdmin с настраиваемым list_filter, как показано здесь: https://docs.djangoproject.com/en/1.5/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter

Например, в той же папке, что и ваш models.py, вы должны создать admin.py, который выглядит примерно так:

from django.contrib import admin

from .models import Thing


class ThingAdmin(admin.ModelAdmin):
    list_filter = ('published',)

admin.site.register(Thing, ThingAdmin)

Это даст вам новый раздел на вашем административном сайте для ваших объектов Thing и позволит вам фильтровать их по тому, были ли они опубликованы или нет.

person Joey Wilhelm    schedule 10.07.2014
comment
Это выглядит здорово! Я попробую это решение и буду держать вас в курсе :) - person Jerome; 10.07.2014
comment
Хорошо, это не то, что я искал. Посмотрите на мой ответ, чтобы иметь решение. - person Jerome; 11.07.2014