如何覆盖 Django 管理中特定模型字段的自动完成视图?

问题描述 投票:0回答:1

我需要重写特定

ForeignKey
的 Select2 小部件在 Django (4.1) 管理中的行为方式。

也就是说,我正在尝试增加 AJAX 请求返回的对象数量,并由

paginate_by
 中的 
AutocompleteJsonView
定义。

遗憾的是这个伟大的解决方案不再适用于 Django 4。

如何扩展

AutocompleteJsonView
并以某种方式告诉 Django 使用我的自定义视图?

编辑:我当前的解决方法是通过将

get_paginator
设置为任何合适的值来覆盖
ModelAdmin
上的
paginator.per_page
,但这并不能解决在 Django 管理中自定义 Select2 小部件的自动完成行为的更广泛问题。

python django jquery-select2
1个回答
0
投票

这是我从 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 可能是一个更好的主意,而不是尝试重用这个可能随时再次更改的未记录的类。)

© www.soinside.com 2019 - 2024. All rights reserved.