Ajax Django简单的复选框动作

Ajax Django simple checkbox action

本文关键字:复选框 Django 简单 Ajax      更新时间:2023-09-26

表的每一行都有一个复选框。我的目标是选中/取消选中复选框,并在我的view.py中更新数据库。对不起,这个简单的问题,但我从几天学习Ajax,它仍然是一个未开发的世界。这是我的代码:

HTML
... 
<table>
      ...
      <tr><td>       
    <form action="mytemplate.html" method="GET" id="myform">{% csrf_token %}
        <input class="chktest" name="test" type="checkbox" value= "{{number}}">                                                                                                                                                                         
    </form>
      </td></tr>
      <tr><td>               
     <form action="mytemplate.html" method="GET" id="myform">{% csrf_token %}
        <input class="chktest" name="test" type="checkbox" value= "{{number}}">                                                                                                                                                                         
     </form>
     </td></tr>
     ...   
 </table>
**JQUERY**
<script type="text/javascript">
    $(document).ready(function() {           
        $('table tr td .chktest').click(function() {                           
                $.ajax({ 
                    data: $(this).serialize(), 
                    type: $(this).attr('method'), 
                    url: $(this).attr('action'), 
                    success: function(response) { 
                        // on success..
                    },
                    error: function(e, x, r) { 
                       // on error...                           
                    }
                }); 
            return false;
        }); 
    });
    </script>     
 **MYVIEW.PY**
 ...
 if request.is_ajax():        
    number = request.GET['number']        
    for obj in tab_company.objects.filter(id_number=number):
           obj.update(check=not obj.check)
    message = "Hello!"  
    return HttpResponse(json.dumps({'message': message}))   

通过这种方式,当我第一次单击复选框时,我得到每行的正确数字。如果我在同一复选框上再选中一次,它不会返回False(取消选中)。我哪里错了?

问题在这一行

tab_company.objects.filter(id_number=number).update(check=True)`

您将值设置为True,而不是切换它。你可以试试下面的命令吗?

for obj in tab_company.objects.filter(id_number=number):
    obj.update(check=not obj.check)