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 的信息:
我有一个 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 的信息: