1

Django (+ django-grappelli + mezzanine) で Web サイトを作成しています。管理パネルをカスタマイズして、特定のモデル インスタンスを表示する新しいダッシュボードを追加したいと考えています。

私がモデルを持っているとしましょう:

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

いくつかのモデル インスタンス (たとえば、T1 と T2 は公開されているが T3 は公開されていない T1、T2、T3) と、公開されていないすべての「モノ」インスタンス (この場合は T3)のリストを表示するダッシュボードが必要です。 .

何か案は?読んでくれてありがとう !

4

2 に答える 2

1

わかりました解決策を見つけました。ガイドラインは次のとおりです。

メザニンを使用すると、ユーザーはダッシュボードをカスタマイズして機能を提供し、それを包含タグとして登録できます。

ドキュメント : 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」によって提供される生成されたものを自動的に追加します。

エラーが発生した場合は、サーバーを再起動することを忘れないでください。

于 2014-07-11T09:06:12.973 に答える
0

ここに見られるように、カスタム list_filter を持つ ModelAdmin が必要なようです: 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 オブジェクト用の新しいセクションが表示され、それらが公開されているかどうかでフィルタリングできるようになります。

于 2014-07-10T15:38:08.943 に答える