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 不会将表单保存到数据库的主要内容,如果未能解决你的问题,请参考以下文章

django 编辑表单,数据怎么回显呀

HTML表单数据未保存在数据库中 - django

通过 Django 将表单 POST 到数据库不保存数据

如何使用 jquery 和 Ajax 将多个文件字段保存到 django

Django:如何使用FormView和ajax将对象保存到数据库?

如何使用多个 Django FBV 通过 Ajax+jQuery 捕获和保存数据