在Django管理界面中,可以动态地向外键字段添加新项,我想使用bootstrap模式创建一个类似的窗口,并使用Ajax进行表单提交和验证。
这是我的用例:
这是添加项的主窗体。项目有一个ref和一个category。
这是添加新类别的第二个表单。
我对显示模态和提交表单以添加新类别没有问题。
相反,问题在于表单验证(以防用户提交空表单),以及刷新选定内容以添加新添加的类别。
这是我的代码:
表单.pyclass 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')
视图.pydef 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
网址.pyurl(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("

},
success: function (data) {
$("#add_category .modal-body").html(data);
}
});
});
附言:我知道这可能是重复的,但没有任何答案让我说到点子上。