单击表单复选框并传递复选框布尔值时如何在Django中刷新view.py?

Posted

技术标签:

【中文标题】单击表单复选框并传递复选框布尔值时如何在Django中刷新view.py?【英文标题】:How to refresh view.py in Django when clicking form checkbox and passing checkbox boolean? 【发布时间】:2021-10-03 18:46:34 【问题描述】:

您好,我正在尝试在单击表单复选框并将复选框布尔值传递给 view.py 时刷新我的网页。

我正在尝试使用 Ajax 来完成此任务,但这是第一次使用 Ajax,我真的不知道它是否正常工作。

html 和 AJAX:

<script type="text/javascript">
  $("#check_legend").change(function()
      var form_data = $("#form_legend").serialize();
          $.ajax( url: '/api/post_form/',
                              type: "POST",
                              dataType: "json",
                              data: form_data: form_data,
                              //cache: false
                     ).done(function(data) 
                          if (data.result === true)
                              alert(data.message);
                         
                     );
                );
</script>


  <div class="row">
    <div class="col-sm-10">
       map|safe 
    </div>
    <div class="col-sm-2">
      <form method="post" id="form_legend">
        <h3><span style="color: #e8c4b4;">Places</span></h3>
        <div class="form-check">
          <input type="checkbox" class="form-check-input" id="check_legend" name="cities">
          <label class="form-check-label" for="check_legend">Cities</label>
        </div>
      </form>
    </div>
  </div>

如果有用的话,这在我的 url.py 中:

path('api/post_form/', post_form_api, name="post_form_api")

对于 ajax 响应,我的 view.py 如下所示:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def post_form_api(request):
      data = 
      if request.method == "POST" and request.POST.get('cities', None) is not None:
          form_field1 = request.POST.get('cities')
          # save the form data and indicate success
          data['result'] = True
          data['message'] = "Form saved successfully"
          ...
      if request.is_ajax():
         return JsonResponse(data)
      else:
         return HttpResponseBadRequest()

在 view.py 的不同部分中,我为网页赋值,我处理 POST 请求,如下所示:

if request.method == 'POST':
    if request.POST.get['cities', False]:

【问题讨论】:

有错误吗?尝试打印request.POST.get('form_data')告诉我你看到了什么... @MoiMyazz 如果我在 ``` 之后这样做 if request.method == 'POST': ``` 当我选中和取消选中复选框时,我什么也得不到。似乎没有触发任何东西。第一次打开网页时,我什至没有在控制台日志中看到任何内容。 不,兄弟,试试if request.method == 'POST': 上方的打印语句request.POST.get('form_data') 你应该会看到类似QueryDic 的对象。 遗憾的是,如果我在 if 语句上方尝试它,则不会出现类似的情况,这可能是因为我的表单数据未保存在模型中吗?我试图在没有模型的情况下完成这项工作。 不,兄弟,这里的模型形式不是问题......这似乎是来自前端。更新您的 Ajax 调用...url: '/api/post_form/',//cache: falsedata: form_data: form_data。试试这些,告诉我你得到了什么 【参考方案1】:

你可以使用

window.location.reload() 

【讨论】:

以上是关于单击表单复选框并传递复选框布尔值时如何在Django中刷新view.py?的主要内容,如果未能解决你的问题,请参考以下文章

通过单击事件传递动态值时,它在控制台中显示未定义

如果提交表单时未选中复选框,如何将布尔值更新为 0

复选框不适用于布尔视图模型属性

如何在引导程序中验证至少标记了一个复选框并将此信息传递给 php?

姜戈。如何在布尔表单字段上应用 css 样式?

根据最初检查的复选框值在后退按钮单击时重新加载 Angular 6 反应式表单