【问题标题】:Why doesn't the following code update the database?为什么以下代码不更新数据库?
【发布时间】:2026-01-14 17:50:01
【问题描述】:

我正在尝试使用带有 ajax 代码的引导模式表单更新我的数据库的内容。但是我的数据库没有使用表单中提供的输入进行更新。表单工作得很好,但我没有看到数据库中更新的内容。怎么了 ???请帮忙,因为我搜索了整个互联网,一无所获:(

html代码:

<div class="container">
    <h1> {{ username }} </h1>
  <h2>Modal Example</h2>
  <!-- Trigger the modal with a button -->
  <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>
  <!-- Modal -->
  <div class="modal fade" id="myModal" role="dialog">
    <div class="modal-dialog">
  <form id="new_user_form">
      {% csrf_token %}
      <!-- Modal content-->
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal">&times;</button>
          <h4 class="modal-title">Modal Header</h4>
        </div>
        <div class="modal-body">
          <div class="form-group"  >
              <label for="usr">Username:</label>
              <input type="text" name="username" class="form-control input-lg" id="username">
              <label for="passwordd">Password:</label>
              <input type="password" name="password" class="form-control input-sm" id="password">
          </div>
        </div>
        <div class="modal-footer">
          <button type="submit" class="btn btn-default" id="submit">Submit</button>
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
      </div>

    </div>
  </div>
  </form>
  <script type="text/javascript" src="/static/bootstrap 3/js/bootstrap.min.js"></script>

Ajax 代码:

<script>
 $(document).on('submit','#new_user_form',function(e){
    e.preventDefault();
    $.ajax({
            type: "POST",
            url: "/testapp/registered/",
            data: {
                    username: $('#username').val(),
                    password: $('#password').val(),
                    csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
            },
            sucess: function(){
                alert("Registeration successfully.")
            }
            error: function(jqXHR, textStatus, errorThrown)
            {
                alert(textStatus, errorThrown);
            }
    });
});


</script>

views.py:

from django.shortcuts import render
from testapp.models import User

def index(request):
    template = 'index.html'
    return render(request,template)

def create_user(request):
    if request.method == 'POST':
        User.objects.create(
            username = request.POST['username'],
            password = request.POST['password'],
        )
        User.save()
    return render(request,'testapp/index.html',{'username':request.POST['username']})

testapp\urls.py:

from django.conf.urls import url
from .import views

urlpatterns = [
    url(r'^$', views.index, name="Index"),
    url(r'^registered/$', views.create_user, name="registered"),
]

【问题讨论】:

  • 您是否在create_user 视图中使用 ipdb 进行调试?如果你打电话给request.POST,你会得到什么?
  • 什么是 ipdb ?好吧,我创建了我的主项目的副本,并猜测该副本更新了数据库,但主项目仍然没有更新数据库,我对这两个项目进行了检查,我得到了 500 内部服务器错误这里是图像错误:postimg.org/image/tim44b9nl
  • 很可能是User.save() 导致了该错误。因为类User 没有属性save。只要摆脱那条线。 create 已经为你保存了对象
  • @karthikr 不正确“用户”确实有保存功能,我可以在建议中看到它。好吧,现在我没有收到任何 500 内部服务器错误,但表单不会自动关闭(提交后),并且我没有收到提示消息“注册成功!” (我在成功标签中用 Ajax 代码编写)
  • 好的,我解决了警报消息问题,但表单没有自动关闭

标签: jquery ajax django


【解决方案1】:

只这样做:

my_user = User.objects.create(username=request.POST['username'], password = request.POST['password'] )
my_user.save()

您需要保存创建的模型实例,而不仅仅是调用模型的 .save() 函数。

【讨论】:

    【解决方案2】:

    在 testapp\urls.py 中:交换 url 路由逻辑

    from django.conf.urls import url
    from .import views
    
    urlpatterns = [
        url(r'^registered/$', views.create_user, name="registered"),
        url(r'^$', views.index, name="Index")
    ]
    

    【讨论】: