Django和复选框

时间:2018-03-01 23:30:16

标签: jquery django

我的应用程序内部的模型上有一些布尔字段。它们默认为false,我想编写一个在true和false之间切换它们的函数。

然后在我的模板上,我希望该功能基于复选框进行操作。然后允许复选框显示检查是否为真,如果为假则不检查。

我只是不确定我是否应该使用网址和视图执行此操作,还是将其作为表单?

这是我到目前为止所得到的:

models.py

while(in.hasNextLine()){
    String str  = in.nextLine();
    if(str.trim().equals("done"){
        break;
    }else{
        String[] arr = str.split("\\s+");
        //then do whatever you want to do 

    }
}

views.py

class CarrierCompany(models.Model):
    rgn = models.BooleanField(default=False)
    van = models.BooleanField(default=False)
    power_only = models.BooleanField(default=False)
    step_deck = models.BooleanField(default=False)
    flatbed = models.BooleanField(default=False)
    reefer = models.BooleanField(default=False)
    hotshot = models.BooleanField(default=False)
    specialized = models.BooleanField(default=False)

    def rgn_equipment(self):
        if self.rgn == False:
            self.rgn = True
        else:
            self.rgn = False
        self.save()

urls.py

def rgn_equipment_toggle(request, pk):
    carrier_company = get_object_or_404(CarrierCompany, pk=pk)
    carrier_company.rgn_equipment()
    return redirect('accounts:carrier_company_detail', pk=pk)

模板

urlpatterns = [
    url(r'rgn_equipment_toggle/(?P<pk>\d+)/$', rgn_equipment_toggle, name='rgn_equipment_toggle'),
]

我可以使用按钮完美地工作,这是一个选项。我只是不确定如何使用复选框完成此操作。我假设我需要操作并显示选中/未使用Jquery检查复选框,所以我也开始使用一些代码,但我对jquery非常新。

1 个答案:

答案 0 :(得分:0)

几个小时后我解决了这个问题。傻我。我不确定这是否是最佳方式,因为它包含模板内部的逻辑,但这就是我现在解决的问题。

{% if carriercompany.rgn == True %}
   <input type="checkbox" data-target="{% url 'accounts:rgn_equipment_toggle' pk=carriercompany.pk %}" checked />
{% else %}
   <input type="checkbox" data-target="{% url 'accounts:rgn_equipment_toggle' pk=carriercompany.pk %}" />
{% endif %}

上面的相同脚本允许您切换

<script type="text/javascript">
   $(function(){
      $('input[type="checkbox"]').change(function(){
         var item = $(this);
         if (item.is(":checked")) {
         window.location.href = item.data("target")
         }else {
          window.location.href = item.data("target")
        }
       });
   });
</script>