&?pager_limit=50
公開されているさまざまなフィルターとうまくマージできるように、などのクエリ引数を追加することで、管理ビュー内のフォームとしてページャーの制限を公開する方法を探しています。
自分で問題を解決することについては、まったく前進していません。contrib.adminとcontrib.users.adminをトロールしていて、探しているものが見つかりません。
ありがとう
&?pager_limit=50
公開されているさまざまなフィルターとうまくマージできるように、などのクエリ引数を追加することで、管理ビュー内のフォームとしてページャーの制限を公開する方法を探しています。
自分で問題を解決することについては、まったく前進していません。contrib.adminとcontrib.users.adminをトロールしていて、探しているものが見つかりません。
ありがとう
デフォルトのクラスが1回設定するため、list_per_page
動的にするためにサブクラス化する必要があります。ChangeList
ChangeList
list_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
class ActionAdmin(admin.ModelAdmin):
list_per_page = 25
ここで指定できます。
DanHの答えに基づいて、私が思いついた(厄介な)解決策は次のとおりです。
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
関連するModelAdminインスタンスで、次get_changelist
の例のように名前を付けたこの関数への呼び出しを追加します。
class DeviceTypeAdmin(admin.ModelAdmin):
def get_changelist(self, request, **kwargs):
return return_changelist_for_request(request)
list_display = ('devicetype', )
にurls.py
、すぐに追加するビューへのリンクをpage_size
追加します。
url(r'^page_size$', 'viewer.views.page_size', name='page_size'),
ビューを追加します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'))
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 %}
)