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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django:如何使用FormView和ajax将对象保存到数据库?相关的知识,希望对你有一定的参考价值。

我正在使用google maps api构建应用程序,用户可以在地图上添加和保存标记。我使用ajax将包含标记属性的表单发送到后端。我正在使用django's heleper FormView

ajax.js:

$(document).on('submit', '.add_marker_form', function(event){

  event.preventDefault();

  // parse form attributes:
    // (irrelevent code here)

  $.ajax({
      method: 'POST',       // or 'type'
      url: '/map/saveMarker/',
      data: data,          // the four attributes
      csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()

      success: function(data){
      console.log("marker saved");
  },
      error: function(data){
      console.log("marker not saved");
   }
  });

 }) // document

forms.朋友

from django.forms import ModelForm
from .models import myModel


class SaveMarkerForm(ModelForm):
      class Meta:
          model = myModel
          fields = ['title', 'url', 'latitude', 'longitude']

迷信.朋友

from django.http import JsonResponse

  class AjaxFormMixin(object):

      def form_invalid(self, form):
          response = super(AjaxFormMixin, self).form_invalid(form)
          if self.request.is_ajax():
             return JsonResponse(form.errors, status=400)
          else:
            return response

      def form_valid(self, form):
          form.save()
          response = super(AjaxFormMixin, self).form_valid(form)
          if self.request.is_ajax():
             data = {
              'message': "Successfully submitted data."
             }
            return JsonResponse(data)
          else:
            return response

views.朋友

import requests
from django.views.generic.edit import FormView
from .forms import SaveMarkerForm
from .mixin import AjaxFormMixin


class SaveMarkerView(AjaxFormMixin, FormView):
      form_class = SaveMarkerForm
      template_name = 'map.html'
      success_url = '/'

但是在提交表单后,对象不会保存在数据库中。如您所见,我将form.save()添加到form_valid方法,如下所示:

Django FormView Not Saving

我也尝试使用UpdateView,如下所示:

Django. Simple FormView not saving

并尝试了其他解决方案,但没有一个有效。所以请帮帮我。我的代码中的问题在哪里?我错过了什么

答案

你是passing a CSRF token with the AJAX request吗?如果不是这可能是您的表单无效的原因。

这篇文章解释了如何include CSRF token in AJAX post

以上是关于Django:如何使用FormView和ajax将对象保存到数据库?的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何使用动态(非模型)数据预填充 FormView?

Django:使用 FormView 时可能有多种形式?

将参数传递给FormView Django中的表单

重定向到 django FormView 中的下一个 URL

python Django(极端情况):如何在FormView(CreateView / UpdateView)的form_valid方法中引发表单无效并添加错误消息

使用jquery post时未调用django formview中的post函数