我需要重写特定
ForeignKey
的 Select2 小部件在 Django (4.1) 管理中的行为方式。
也就是说,我正在尝试增加 AJAX 请求返回的对象数量,并由
paginate_by
中的
AutocompleteJsonView
定义。
遗憾的是这个伟大的解决方案不再适用于 Django 4。
如何扩展
AutocompleteJsonView
并以某种方式告诉 Django 使用我的自定义视图?
编辑:我当前的解决方法是通过将
get_paginator
设置为任何合适的值来覆盖 ModelAdmin
上的 paginator.per_page
,但这并不能解决在 Django 管理中自定义 Select2 小部件的自动完成行为的更广泛问题。
这是我从 Django 2.2 升级到 3.2 后所做的事情,因为 autocomplete_view 从 Admin 移到了 Site。
from django.contrib.admin.views.autocomplete import AutocompleteJsonView
class MySite(AdminSite):
def autocomplete_view(self, request):
if request.GET['model_name'] == "mymodel":
return CustomAutocompleteJsonView.as_view(admin_site=self)(request)
else:
return super().autocomplete_view(request)
class CustomAutocompleteJsonView(AutocompleteJsonView):
pass
# Override serialize_result, get, or get_paginator here
(话虽这么说,实现和使用自定义 api 可能是一个更好的主意,而不是尝试重用这个可能随时再次更改的未记录的类。)