html Django 中的表单 returns none

html form in Django returns none

我试图将此 HTML 表单保存到我的 table 数据库中,但出现“None”错误。我已经研究这个几个小时了。请任何帮助将不胜感激

拜托,我该如何解决这个问题

这是我创建的HTMLorder.html

 <form action="" method="post" id="payment-form">
                      <input type="text" class="form-control" id="first_name" 
                        name="first_name"
                        value="{{request.user.first_name}}">
                   
                    <textarea type="text" class="form-control" id="address" name="address" 
                    placeholder="1234 Main St" required></textarea>
               
                <button id="submit" class="btn btn-success lg w-100 fw-bold" >
                  Proceed to Payment
                </button>

</form>

这是我的 views.py

def add(request):
    basket = Basket(request)
    if request.POST.get("action") == "post":
        order_key = request.POST.get("order_key")
        user_id = request.user.id
        baskettotal = basket.get_total_price()
        first_name = request.POST.get("first_name")
        last_name = request.POST.get("last_name")
        address = request.POST.get("address")
        print(first_name, last_name, address)

        order = Order.objects.create(
                    first_name = first_name,
                    address=address,
                    total_paid=baskettotal,
                    
            )
            order_id = order.pk
        response = JsonResponse({"success": "Order created"})
        return response

js文件


<script type="text/javascript">

  function makePayment(e) {
    e.preventDefault();
    
    $.ajax({
      type: "POST",
      url: '{% url "order:add" %}',
      data: {
        csrfmiddlewaretoken: "{{csrf_token}}",
        action: "post",
      },
      success: function (json) {
        console.log(json.success)
      },
      error: function (xhr, errmsg, err) {},
    });

   
  }
</script>

首先你不需要 post 额外的值 action 来确定 post 请求你只需要使用 request.method它会 return 你所有可用的方法你可以通过添加这样的检查来检查特定方法

if request.method == "POST":

注意 : 添加此检查时始终使用大写方法
而且我不确定你在哪里调用 makePayment() 函数以及你试图在你的 python 脚本中访问的任何数据你必须像这样通过 ajax{data:{}} 传递它

 function makePayment(e) {
    e.preventDefault();
    
    $.ajax({
      type: "POST",
      url: '{% url "order:add" %}',
      data: {
        csrfmiddlewaretoken: "{{csrf_token}}",
        order_key : "your order key",
        first_name : $('#first_name').val(),
        last_name : $('#last_name').val(),
        address : $('#address').val()
      },
      success: function (json) {
        console.log(json.success)
      },
      error: function (xhr, errmsg, err) {},
    });
   
  }

然后像这样访问它

def add(request):
    basket = Basket(request)
    if request.method == "POST":
        order_key = request.POST.get("order_key")
        #....all other fields