1

&?pager_limit=50公開されているさまざまなフィルターとうまくマージできるように、などのクエリ引数を追加することで、管理ビュー内のフォームとしてページャーの制限を公開する方法を探しています。

自分で問題を解決することについては、まったく前進していません。contrib.adminとcontrib.users.adminをトロールしていて、探しているものが見つかりません。

ありがとう

4

3 に答える 3

4

デフォルトのクラスが1回設定するため、list_per_page動的にするためにサブクラス化する必要があります。ChangeListChangeListlist_per_page

例えば:

class CustomUserChangeList(ChangeList):
    def __init__(self, request, model, list_display, list_display_links,
                 list_filter, date_hierarchy, search_fields, list_select_related,
                 list_per_page, list_max_show_all, list_editable, model_admin):
        list_per_page = get_user_list_limit()
        super(CustomUserChangeList, self).__init__(request, model, list_display, list_display_links,
            list_filter, date_hierarchy, search_fields, list_select_related,
            list_per_page, list_max_show_all, list_editable, model_admin)

次にget_changelist、ModelAdminサブクラスでオーバーライドします。

class CustomUserAdmin(UserAdmin):

    def get_changelist(self, request, **kwargs):
        return CustomUserChangeList
于 2012-10-12T05:25:06.183 に答える
1
class ActionAdmin(admin.ModelAdmin):
    list_per_page = 25

ここで指定できます。

于 2012-10-11T11:08:28.360 に答える
0

DanH答えに基づいて、私が思いついた(厄介な)解決策は次のとおりです。

  1. return_changelist_for_requestで表示されるグローバル関数を作成しますadmin.py

    def return_changelist_for_request(request):
        class CustomUserChangeList(django.contrib.admin.views.main.ChangeList):
            def __init__(self, request, model, list_display, list_display_links,
                 list_filter, date_hierarchy, search_fields, list_select_related,
                 list_per_page, list_max_show_all, list_editable, model_admin):
                    try:
                        page_size = request.session.get('page_size', 100)
                        list_per_page = int(page_size)
                    except ValueError:
                        list_per_page = 100
                        request.session['page_size'] = list_per_page
                    super(CustomUserChangeList, self).__init__(request,
                        model, list_display, list_display_links, list_filter,
                        date_hierarchy, search_fields, list_select_related,
                        list_per_page, list_max_show_all, list_editable,
                        model_admin)
        return CustomUserChangeList
    
  2. 関連するModelAdminインスタンスで、次get_changelistの例のように名前を付けたこの関数への呼び出しを追加します。

    class DeviceTypeAdmin(admin.ModelAdmin):
    
        def get_changelist(self, request, **kwargs):
            return return_changelist_for_request(request)
    
        list_display = ('devicetype', )
    
  3. urls.py、すぐに追加するビューへのリンクをpage_size追加します。

    url(r'^page_size$', 'viewer.views.page_size', name='page_size'),
    
  4. ビューを追加しますviews.py

    from django.http import HttpResponseRedirect
    
    def page_size(request):
        request.session['page_size'] = request.GET['page_size']
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
    
  5. Django管理者のbase.htmlテンプレートをsite-packagesからテンプレートディレクトリにコピーし、同様のHTMLコードを追加します(このHTMLの例ではdjango-admin-bootstrappedを想定しています)。

    <form class="navbar-form navbar-left" action='/page_size'>
      <div class="form-group">
        <input type="text" class="form-control" placeholder="Size" name="page_size" size="3">
      </div>
      <button type="submit" class="btn btn-default">Set page size</button>
    </form>
    

(クロージングdiv前に追加しました{% block object-tools %}{% endblock %}

于 2015-07-16T13:41:36.637 に答える