Django admin 表格内联查找 select 一个非常大的查询集的下拉框

Django admin tabular inline lookup select dropdown box for a very large queryset

我有一个 django 管理表格内联,其中我有 form = ProdForm,其中包含一个 modelchoicefield select 框,如下所示;

class ProdForm(forms.ModelForm):
    productid = forms.ModelChoiceField(queryset=Product.objects.filter(active=True),
                                       widget=Select2(select2attrs={"width": "400px"}), )

如您所见,我正在使用 easy_select2 模块,这也为我提供了一个查找字段。

但是,如果我尝试在相应的 tabularInLine 中加载它,它永远不会加载,因为记录数量非常多(假设数百万)。因此加载整个查询集是不可能的。我需要找到一种方法来做到这一点,以便使用管理员的人可以搜索他们需要的对象,假设是 Product model.

上的属性之一的名称

一个想法是保留搜索框但不最初加载查询集并在搜索字段中有 3 个或更多字母时点击数据库,这可能会起作用。然而,这将包括一些我不太熟悉的 js,我更喜欢一些 pythonic/django 的方式来做到这一点。

或者也许有一个很好的 django 方式,但我还没有找到它,我束手无策。 如果有任何建议,我将不胜感激。

尝试使用ajax.

您可以在提交搜索栏时调用ajax,然后在view.py中搜索您的记录,最后在控制台或模板中显示结果。

这是一个通用示例:

file.js

$("#search").submit(function(e){
    e.preventDefault();
    $.ajax({
        type: 'GET',
        url: path_to_view,
        data: {'data':data_from_search_bar},
        success: function(response){
            var result = response['result']
            console.log(result)
        }
        error: 'some_func..'
    })
});

view.py

def get_result(request):
     if request.is_ajax and request.method =="GET":
         response_data = request.GET['data']
         product = ProductModel.objects.get(name=response_data)# or others attrs
         return JsonResponse({'result':product},status=200)

在这里阅读更多关于 ajax 的信息:

CFE

pluralsight

geeksforgeeks