传输到Django CBV时的Ajax数据操作

问题描述

我正在将django-autocomplete-light与用于M2M表单的select2“选择多个”小部件一起使用。 我将其设置为在找不到输入时启用“新建”。 但是,我的模型除了“选择多个”小部件的初始输入之外,还具有其他必填字段。 我试图创建一种方法来在尝试创建时提示用户输入其他字段,然后通过ajax将数据发送到我的django视图。 现在,如果我在视图中预先提供了其他必填字段,则用户可以使用其输入的名称(并单击“新建”)创建一个新对象,其他字段将在视图。这告诉我代码正在运行,但是理想情况下,我想提示用户输入其他数据。 我创建了一个提示,但是我无法正确传输数据的语法。

例如,假设我有一个模型,其中包含必填字段“名称”和“位置”。 在Select2小部件上,用户键入一个不存在的“名称”作为对象,然后单击“新建”。现在,我希望脚本提示他们输入位置,然后将其作为get_or_create参数进行传输。

以下代码

**views.py**
class Videoautocomplete(autocomplete.Select2QuerySetView):
     create_field = 'name'
     def create_object(self,text):
        """Create an object given a text."""
        object = Model.objects.all()[0]
        return self.get_queryset().get_or_create(name=text,location=object.location)[0]
    def get_queryset(self):
        """This is the code for the initial search within the select2 field"""
        qs = Model.objects.order_by('name')
        if self.q:
            qs = qs.filter(name__icontains=self.q)
        return qs
**select2.js**
$(this).on('select2:selecting',function (e) {
            var data = e.params.args.data;

            if (data.create_id !== true)
                return;

            e.preventDefault();

            var select = $(this);

            $.ajax({
                url: $(this).attr('data-autocomplete-light-url'),type: 'POST',dataType: 'json',beforeSend: function(xhr,settings) {
                    xhr.setRequestHeader("X-CSrftoken",document.csrftoken);
                    """Below is prompting the user for the location,and assigning it to the variable location"""
                    var location = prompt("Please enter the location","");
                },"""How do I add the contents of the variable Location into the data below?"""
                data: {
                    text: data.id,forward: yl.getForwards($(this))
                },success: function(data,textStatus,jqXHR ) {
                    select.append(
                        $('<option>',{value: data.id,text: data.text,selected: true})
                    );
                    select.trigger('change');
                    select.select2('close');
                }
            });
        });

如果我以字符串形式截取传输的JSON对象(使用“ test”作为输入),则会得到以下信息:

{"id":"test","text":"Create \"test\"","create_id":true}

我需要弄清楚如何将Location变量注入到该对象中,但是我不能弄清楚语法。有帮助吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)