如何解决传输到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 举报,一经查实,本站将立刻删除。