【问题标题】:Django - implementation of select2 with urlDjango - 使用 url 实现 select2
【发布时间】: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;
}

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

【问题讨论】:

    标签: jquery python django jquery-select2


    【解决方案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
                        }
                    })
                };
            }
        }
    });
    
    });
    

    【讨论】:

      猜你喜欢
      • 2015-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 2013-05-09
      • 1970-01-01
      • 2013-09-15
      • 2014-03-29
      相关资源
      最近更新 更多