Django - 使用 url 实现 select2

Posted

技术标签:

【中文标题】Django - 使用 url 实现 select2【英文标题】:Django - implementation of select2 with url 【发布时间】:2017-09-20 02:48:07 【问题描述】:

我在我的网页中添加了一个 select2 字段,我想使用 ajax 将记录加载到其中。所以我声明了一个 url 字段。

$(document).ready(function() 
        $("#field_id").select2(
            placeholder: "Search...",
            ajax: 
                url: ' url ',
                dataType: 'json',
                ...
                templateResult: formatItem,

这个 url 指向一个方法,它应该返回匹配的产品,但我不知道如何序列化它们以便它工作。这是我的方法:

    def get_ajax(self, request, *args, **kwargs):
        query = request.GET.get('q', None)
        if query:
            products = Product.objects.filter(name__icontains=query)
            return JsonResponse(products, safe=False)
        else:
            return JsonResponse(data='success': False,
                                      'errors': 'No mathing items found')

但我只得到未定义的值。 我的 JS formatItem() 方法如下所示:

function formatItem (item) 
    console.log(item);
    if (item.loading) return item.name || item.text;
    var markup = '<div class="clearfix">' +
    '<div class="col-sm-12">' + item.name +
    '</div>' +
    '</div>';

    return markup;

我做错了什么?提前致谢。

【问题讨论】:

【参考方案1】:

您可以使用.values 将结果作为dict 获取。

def get_ajax(self, request, *args, **kwargs):
            query = request.GET.get('q', None)
            if query:
                products = Product.objects.filter(name__icontains=query).values("pk","name")
                products = list(products)
                return JsonResponse(products, safe=False)
            else:
                return JsonResponse(data='success': False,
                                          'errors': 'No mathing items found')

在你的 js 文件中

    $(document).ready(function()
        $("#field_id").select2(
    tags: true,
    multiple: true,
    // tokenSeparators: [',', ' '],
    minimumInputLength: 2,
    minimumResultsForSearch: 10,
    ajax: 
        url: '% url 'product:suggest_product' %',
        dataType: "json",
        type: "GET",
        data: function (params) 

            var queryParameters = 
                q: params.term
            
            return queryParameters;
        ,
        processResults: function (data) 
            return 
                results: $.map(data, function (item) 
                    return 
                        text: item.product,
                        id: item.pk
                    
                )
            ;
        
    
);

);

【讨论】:

以上是关于Django - 使用 url 实现 select2的主要内容,如果未能解决你的问题,请参考以下文章

在 django_select2 中,field_id 参数未在 ajax url 中传递

如何以编程方式打开 DAL(Django Autocomplete Light)Select2

Django Form补充

在 Django 中,如何使用模板和 DB 对象中使用的动态 URL 实现样板 HTML 变量?

Django 表单 (中)-动态实现select效果

python-Django框架url分发实现返回时间