Jquery Django CreateView与AJAX

Jquery Django CreateView与AJAX,jquery,ajax,django,Jquery,Ajax,Django,我想在Django中使用AJAX通过通用视图和模型创建、更新和删除对象。 Django的官方文档介绍了AjaxableResponseMixin,并显示了以下代码: from django.http import JsonResponse from django.views.generic.edit import CreateView from myapp.models import Author class AjaxableResponseMixin: """ Mixin t

我想在Django中使用AJAX通过通用视图和模型创建、更新和删除对象。 Django的官方文档介绍了AjaxableResponseMixin,并显示了以下代码:

from django.http import JsonResponse
from django.views.generic.edit import CreateView
from myapp.models import Author

class AjaxableResponseMixin:
    """
    Mixin to add AJAX support to a form.
    Must be used with an object-based FormView (e.g. CreateView)
    """
    def form_invalid(self, form):
        response = super().form_invalid(form)
        if self.request.is_ajax():
            return JsonResponse(form.errors, status=400)
        else:
            return response

    def form_valid(self, form):
        # We make sure to call the parent's form_valid() method because
        # it might do some processing (in the case of CreateView, it will
        # call form.save() for example).
        response = super().form_valid(form)
        if self.request.is_ajax():
            data = {
                'pk': self.object.pk,
            }
            return JsonResponse(data)
        else:
            return response

class AuthorCreate(AjaxableResponseMixin, CreateView):
    model = Author
    fields = ['name']
(我有一个像这样的模型) 然而,我不明白如何在模式中实现它。 我目前正在使用此表单,但它是一个网页,而不是一个模式:

  <form method="post" novalidate>
    {% csrf_token %}
    {% include 'includes/form.html' %}
    <button type="submit" class="btn btn-success">AJouter</button>
  </form>

{%csrf_令牌%}
{%include'包含/form.html%}
阿约特

有没有一种简单的方法可以使用ajax和jquery在模式中实现它?

我使用fetch而不是ajax。这种使用在javascript的新ES6中得到了保证。 这是我的密码

async function saveMateriaPrima(event) {
  console.log('Guardando producto');

  event.preventDefault();
  let dataForm = new FormData(formMatPrima)
  let url = formMatPrima.action

  fetch(url, {
    method: 'POST',
    body: dataForm
  })
  .then(function(response){
    console.log(response);

    if(response.ok){
      let producto = document.getElementById('id_nombre').value
      console.log(`${producto} guardado correctamente.`);

      document.getElementById('id_nombre').value = ''
      $('#modal-crearmateriaprima').modal('hide')

    }else{
      throw "Error en la llamada Fetch"
    }
  })
  .catch(function(err){
    console.log(err);    
  })
}
它与您的代码一起工作,但我无法获取新对象的pk。 我希望这对您有所帮助,并且可以改进此代码以获取pk数据。

您能试试这个吗