1

Django 1.4 を使用しています。管理者の change_list ページのように見える管理者ページにキューを追加したいと思います。私は非常に多くのブログや他のフォーラムを試しましたが、私が望むものは得られませんでした. 次の機能を備えた管理ページにカスタムビューを追加するにはどうすればよいですか?

  • 自分のクエリセット
  • そこで利用可能なすべての機能を備えた管理変更リストページのように見えるはずです。

models.py

class Broker(models.Model):
    user = models.OneToOneField(User)
    agency = models.CharField(max_length=100)

urls.py

    url(r'^admin/broker_list/$', 'room.admin_views.broker_list'),
    url(r'^admin/', include(admin.site.urls)), 

admin_views.py

def broker_list(request):
    return render_to_response(
        "admin/broker_list.html",
        {'broker_list' : Broker.objects.filter(user__is_active=False)},
        RequestContext(request, {}),
    )
broker_list = staff_member_required(broker_list)

broker_list.html

{% extends "admin/base_site.html" %}
{% load admin_urls %}

{% block title %}List of pending agent{% endblock %}

{% block content %}
    {{broker_list}}
{% endblock %}

上記のコードを使用すると、リンク /admin/broker_list/ にアクセスしてクエリセットを確認できます。しかし、私は管理者のchagelistページのように生成または拡張する方法がわかりません。

私も Django ModelAdmin の get_urls メソッドにうんざりしていましたが、ドキュメントには my_view が HttpResponse を返さなければならないと書かれていたので、生のオブジェクトしかレンダリングしません。参考までに、以下のコードを共有しました。

admin.py

class ItemAdmin(admin.ModelAdmin):
    model = Broker
    def admin_list_broker(self, request):
        print "yes iam here"
        return HttpResponse("Hello!")
        #return HttpResponseRedirect(
        #        reverse("admin:account_agent_changelist",)
        #)
    def get_urls(self):
        from django.conf.urls.defaults import *
        urls = super(ItemAdmin, self).get_urls()
        my_urls = patterns('',
            url(
                r'broker_list',
                self.admin_site.admin_view(self.admin_list_broker),
                name='admin_list_broker',
            ),
        )
        print my_urls + urls
        return my_urls + urls

admin.site.register(Broker, ItemAdmin)

上記の方法のいずれかで要件を実装するのを手伝ってください。

ありがとう。

4

2 に答える 2

2

カスタムの管理者変更ビューを作成するのではなく、組み込みのビューを拡張することでこの問題に取り組みます.django管理者はこれを容易にするための多くのフックを提供します.ここに私の考えがあります:

  1. デフォルトのクエリセットを変更しますが、クエリセットによって返されないオブジェクトを編集する機能が失われるため、これをお勧めしません。
  2. 「ブローカー リスト」クエリセットを表示するカスタム フィルターを作成します。このフィルターを有効にするために直接リンクできる GET URL クエリがさらに提供されるため、これをお勧めします。
  3. 変更ビューを完全に削除して、独自のオプションを使用することもできます。このオプションは、私が経験が最も少なく、コメントできません。

変更リスト テンプレート管理カスタム アクションを変更して、ルック アンド フィールをさらにカスタマイズし、カスタム 'アクション' を提供することも検討してください。プロジェクト固有の機能を提供するために、過去に両方をうまく使用しました。

非常に興味深いのは、has_add_premissionhad_change_permission、およびhas_delete_permissionフックです。これらを django-guradian などと組み合わせると、カスタム管理ベース テンプレートを使用して、バックエンド管理者を完全なフロントエンド管理として使用できるようになります。

時間をかけてモデル管理ページ全体をよく読んでください。理解すればするほど、カスタム フロント エンド管理のコーディングを行う必要がなくなります。

于 2012-09-23T18:49:46.697 に答える
1

カスタムビューを管理サイトに表示したい場合は、「django admin plus」を使用できます。これは、カスタムビューを管理サイトにバインドできるライブラリです。そのビューで選択したクエリとモデルを使用して、管理サイトではないのでさらに先に進むことができます。

この django ライブラリを試して、フィードバックを共有してください。

ビューを admin.py に登録すると、ビューは次のようになります。

@admin.site.register_view('pathname')
def my_view(request):
    do_something

このライブラリであなたの経験を共有してください。

良いものを持っている

于 2013-12-26T19:51:19.583 に答える