javascript - 如何用静态数据预填充 AutoModelSelect2Field? (django-select2 库)

标签 javascript ajax django json jquery-select2

我有如下字段:

class ContactSelect(AutoModelSelect2Field):
    queryset = Contact.objects.all()
    search_fields = ['name__contains']
    to_field = 'name'
    widget = AutoHeavySelect2Widget

它工作正常,但仅在我输入 2 个字母后才开始加载,而我希望它将最相关的选项直接包含到 html 中,并在用户仅输入 1 个字母时搜索它们。那么你会推荐什么方法呢?是否可以用 django-select2 做到这一点(显然是 select2 本身),或者我会为此编写自己的 JS 函数?

最佳答案

可能的解决方案是允许空搜索,这样即使搜索字段中没有任何内容,列表中也会有一些项目。

django-select2 View 总是跳过“get”方法中的空项,因此我们需要重写它:

class MySelect2ResponseView(AutoResponseView):
  def get(self, request, *args, **kwargs):
    term = request.GET.get('term')
    if term == "":
        return self.render_to_response(self._results_to_context(self.get_results(request, term, -1, None)))
    return super(MySelect2ResponseView, self).get(request, *args, **kwargs)

现在“”项将进入您领域的“get_results”方法:

class ContactSelectWidget(AutoHeavySelect2Widget):
  def __init__(self, *args, **kwargs):
    kwargs['select2_options'] = {
      # this will allow select2 to send empty search to server 
      'minimumInputLength': 0, 
      # it's needed, otherwise search field will be hided by select2 
      'minimumResultsForSearch': 0, 
    }
    super(ContactSelectWidget, self).__init__(*args, **kwargs)

class ContactSelect(AutoModelSelect2Field):
  widget = ContactSelectWidget 
  queryset = Contact.objects.all()
  search_fields = ['name__contains']
  to_field = 'name'

  def get_results(self, request, term, page, context):
    if term == "":
      # return anything you want here:  
      return ('nil', False, [(1, "my_item1", {}), (2, "my_item2", {})])
    else:
      return super(ContactSelect, self).get_results(request, term, page, context)

关于javascript - 如何用静态数据预填充 AutoModelSelect2Field? (django-select2 库),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15323326/

相关文章:

python - django 中的 Like 按钮在 django 中无法正常工作

javascript - moment isBetween 返回 false

javascript - `Array.prototype.slice.call` 是如何工作的?

javascript - 计算器的脚本计算范围错误

ajax - AJAX 是如何实现的,它如何帮助 Web 开发?

html - 使用Ajax但页面仍然刷新

python - 如何从 Django REST API 将图像加载到 React?

javascript - 在没有重定向的情况下更新 URL 不起作用

asp.net-mvc - 具有 Ajax 表单的模型状态

Django 自定义表单选择标签