gpt4 book ai didi

jquery - 具有验证和多表单处理的 Django Ajax 提交

转载 作者:太空狗 更新时间:2023-10-29 21:34:26 26 4
gpt4 key购买 nike

在 Django 管理界面中,有一个很好的功能可以动态地将新项目添加到外键字段,我想制作一个类似的功能,使用弹出窗口的引导模式和表单提交和验证的 Ajax。

这是我的用例:

这是添加项目的主窗体。项目有一个引用和一个类别。

enter image description here

这是添加新类别的第二种形式。

enter image description here

我在显示模式和提交表单以添加新类别方面没有问题。相反,问题在于表单验证(以防用户提交空表单),以及刷新选择内容以添加新添加的类别。

这是我的代码:

表格.py

class ItemForm(forms.ModelForm):
ref = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control'}),max_length=255)
category = forms.ModelChoiceField(queryset=ItemCategory.objects.all(), empty_label="(choose from the list)")


class ItemCategoryForm(forms.ModelForm):
category = forms.CharField(
max_length=255,
required=True,
help_text='Add a new category')

View .py

def add(request):
if request.method == 'POST':
form = ItemForm(request.POST)
if form.is_valid():
item= Item()
item.ref = form.cleaned_data.get('ref')
item.save()
return redirect('/item_list/')
else:
form = ItemForm()
form1 = ItemCategoryForm()
return render(request, 'item/add.html', {'form': form, 'form1':form1})

def add_category(request):
if request.method == 'POST':
form1 = ItemCategoryForm(request.POST)
if form1.is_valid():
vulnCategory = ItemCategory()
ItemCategory.category = form1.cleaned_data.get('category')
ItemCategory.save()
if request.is_ajax():
#TODO: What Should I redirect
else:
#TODO: What Should I redirect
else:
#TODO: What Sould I do to return errors without reloding the page and to refresh the list of categories

网址.py

url(r'^add/$', 'add', name='add'),
url(r'^add_category/$', 'add_category', name='add_category'),

我还添加了这个 jQuery 函数来加载结果

$(".add").click(function () {
$.ajax({
url: '/items/add_category/',
data: $("form").serialize(),
cache: false,
type: 'post',
beforeSend: function () {
$("#add_category .modal-body").html("<div style='text-align: center; padding-top: 1em'><img src='/static/img/loading.gif'></div>");
},
success: function (data) {
$("#add_category .modal-body").html(data);
}
});
});

PS:我知道它可能重复,但没有一个答案让我明白这一点。

最佳答案

在我为内联添加项目的相关类别所做的解决方案下方。

使用与问题相同的形式、url 并添加

添加类别的 View

@login_required 
def add_category(request):
data = {}
if request.method == 'POST' :
form = ItemCategoryForm(request.POST)
if form.is_valid():
itemCategory= ItemCategory()
itemCategory.name = form.cleaned_data.get('name')
itemCategory.save()
data['new_itemcategory_value'] = itemCategory.name;
data['new_itemcategory_key'] = itemCategory.pk;
data['stat'] = "ok";
return HttpResponse(json.dumps(data), mimetype="application/json")
else:
data['stat'] = "error";
return render(request, 'item/add_category_modal.html', {'form': form})
else:
form = ItemCategoryForm()
return render(request, 'item/add_category_modal.html', {'form': form})

Javascript 代码

我的解决方案中棘手的部分是在两个不同的 html 文件中分离模式和 man 表单,并使用 jQuery 处理新项目的添加和选择。

这段Js代码必须包含在两个html文件中:

// This function is for showing the modal 
$(function () {

$(".add_category_show_button").click(function () {
$.ajax({
type: 'GET',
url: '/item/add_category/',
data: $("form").serialize(),
cache: false,
success: function (data, status) {
$('#add_category_modal_id').html(data);
$('#add_category_modal_id').modal()
}
});
}); });

// This second function is for submitting the form inside the modal and handling validation

$(function () {

$(".add_category_submit_button").click(function () {
$.ajax({
type: 'POST',
url: '/item/add_category/',
data: $("form").serialize(),
cache: false,
success: function (data, status) {
if (data['stat'] == "ok") {
$('#add_category_modal_id').modal('hide');
$('#add_category_modal_id').children().remove();
$('#id_category')
.append($("<option></option>")
.attr("value", data['new_itemcategory_key'])
.text(data['new_itemcategory_value']))
.val(data['new_itemcategory_key']);
}
else {
$('#add_category_modal_id').html(data);
$('#add_category_modal_id').modal('show');
}
}
});
}); });

关于jquery - 具有验证和多表单处理的 Django Ajax 提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24932560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com