django ajax 不会将表单保存到数据库
Posted
技术标签:
【中文标题】django ajax 不会将表单保存到数据库【英文标题】:django ajax doesn't save form to database 【发布时间】:2020-08-29 19:41:57 【问题描述】:当我尝试使用 ajax 将数据保存到数据库时遇到问题。
它总是给我success
.. 这意味着它工作正常.. 但它没有将数据保存到数据库。
我也尝试在console.log(data.message)
中打印'message': 'form is saved'
,但它总是给我undefined
观看次数
@login_required(login_url='login')
def PostCreateView (request):
form = PostCreateForm()
if request.is_ajax():
form = PostCreateForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.author = request.user
instance.save()
data =
'message': 'form is saved'
return JsonResponse(data)
context =
"form": form,
return render(request, "blog/new_post.html", context)
urls.py
path('new_post/', PostCreateView, name='new_post'),
new_post.html
<form method="POST" enctype="multipart/form-data" class="my-ajax-form" data-url="% url 'new_post' %">
% csrf_token %
form|crispy
<input class="btn btn-secondary mt-4" type="submit" value="Add New Post">
</form>
plugins.js
$(document).ready(function ()
var $myForm = $('.my-ajax-form'); // select form class
$myForm.submit(function (event)
event.preventDefault();
var $formData = $myForm.serialize(); // get all data from form which will be submitted to database
var $thisURL = $myForm.attr('data-url') || window.location.href; // data-url is attribute in form
$.ajax(
method:'POST',
url: $thisURL,
data: $formData,
success: handleSuccess,
error: handleError,
);
function handleSuccess(data)
console.log('success');
console.log(data.message);
$myForm[0].reset();
function handleError(ThrowError)
console.log('error');
console.log(ThrowError);
);
);
我在这里尝试了大量的问题和答案..两天没有结果。
任何机构都可以帮忙吗?
提前致谢
【问题讨论】:
首先,你能显示你的forms.py吗?另外,您是否尝试在提交后打印instance
的值。为什么你有两个表单变量?试着只放一个。在is_ajax
if 语句之外添加form = PostCreateForm(request.POST)
【参考方案1】:
form = PostCreateForm(request.POST, request.FILES)
【讨论】:
【参考方案2】:我在使用表单的 Ajax 方面没有太多经验,但我认为您没有在视图中使用发送的数据(数据:$formData)来使用 Ajax 获取数据。你只是像普通人一样验证它。请参考这篇文章 https://dev.to/coderasha/how-to-send-django-form-with-ajax-4bpo
【讨论】:
【参考方案3】:这是我对此的看法, PostCreateForm() 是您正在实例化的对象。但是您传递的是变量比较。
最后你只会得到 True、False 或 None 作为传递给 PostCreateForm()
的参数
python 解释器可能会将它们评估为比较。
这意味着您可能最终会得到这样的函数调用PostCreateForm(True,None).
【讨论】:
我明白你的意思,你在写..我把它改成PostCreateForm()
和PostCreateForm(request.POST)
..谢谢..我还在等待解决我的问题。以上是关于django ajax 不会将表单保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jquery 和 Ajax 将多个文件字段保存到 django