【问题标题】:How to pre-populate AutoModelSelect2Field with static data? (django-select2 library)如何使用静态数据预填充 AutoModelSelect2Field? (django-select2 库)
【发布时间】:2013-02-25 17:29:30
【问题描述】:

我有如下字段:

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

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

【问题讨论】:

    标签: javascript ajax django json jquery-select2


    【解决方案1】:

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

    django-select2 视图总是跳过“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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-02
      • 1970-01-01
      • 2011-04-15
      • 2014-03-31
      • 1970-01-01
      • 2016-03-28
      相关资源
      最近更新 更多