Django管理表格内联查找选择下拉框,用于一个非常大的查询集



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

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

多元视觉

极客对极客