Django中的html表单不返回

Posted

技术标签:

【中文标题】Django中的html表单不返回【英文标题】:html form in Django returns none 【发布时间】:2022-01-22 04:48:50 【问题描述】:

我正在尝试将此 html 表单保存在我的数据库表中,但出现“无”错误。我已经为此做了一个小时。请任何帮助将不胜感激

请问,我该如何解决这个问题

这是我创建的 HTML order.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>

这是我的意见.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>

【问题讨论】:

您说您已经尝试了“几个小时”来解决问题,但您究竟尝试了什么?我们需要知道这一点,这样我们才能避免建议您已经尝试过的修复。 我尝试使用模型表单,但我发现很难使用样式自定义 HTML @R.Uziel 我用的是jQuery,所以这部分代码 $.ajax( type: "POST", url: '% url "order: add" %', data: csrfmiddlewaretoken: "csrf_token", action: "post", , 是我使用 if request 的原因.POST.get("action") == "post": 【参考方案1】:

首先,您不必发布额外的价值 action 来确定发布请求,您只需使用 request.method 它会返回所有可用的方法,您可以通过添加来检查特定方法像这样检查

if request.method == "POST":

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

 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

【讨论】:

以上是关于Django中的html表单不返回的主要内容,如果未能解决你的问题,请参考以下文章

提交表单时,DJANGO 中的 POST 方法返回“None”

为啥django不处理PUT方法带过来的表单

django——form组件

Django 高级

django 如何写表单提交

将HTML表单变量传递给Django中的python函数