当另一个复选框被选中时,复选框被取消选中django

8ljdwjyq  于 2023-06-25  发布在  Go
关注(0)|答案(1)|浏览(182)

我有两个复选框,在两个不同的HTML表单。在我的模板中,当一个复选框被点击时,它的值被提交给视图函数并保存到数据库中,然后该复选框使用if else语句变成一个图标。
表单代码段:

<form id='ISBN_form' action="{%url 'tracker:bookSteps' book_page.id%}" method="POST">
    {% csrf_token %}
    <div class="columns is-mobile">
        {% if book_progress.ISBNsent == 'True' %}
        <div class="content column is-5">
            <label class="checkbox" dir="rtl">
                <i class="fa-solid fa-check has-text-success"></i>
                تم التسليم
            </label>
        </div>
        {%else%}
        <div class="content column is-5">
            <label class="checkbox" dir="rtl">
                <input type="checkbox" name="ISBNsent" id="ISBNsent" value="True" onchange="submitCheckbox();">
                    تم التسليم
            </label>
        </div>
        {%endif%}
    </div>
</form>

这工作得很好,值被保存到数据库中,并成为HTML页面中的图标。
但问题是,当我选中一个复选框时,另一个复选框将被取消选中,反之亦然,仅在html模板中,但在数据库中,它将保持选中状态。我不知道问题出在哪里,为什么当我有if else并且正在检查的值来自数据库时会发生这种行为,那么为什么它再次被取消检查?
我的视图功能:

def bookSteps(request,book_id):
   book_page = get_object_or_404(Book, pk=book_id)
   print(book_page.id)
   book_progress = Progress()
   book_progress = Progress.objects.get(BookID=book_id)
   if request.method == 'POST': 
      print(request.POST)
      if 'ISBNsent' in request.POST:
         ISBNsent=request.POST.get("ISBNsent")
         book_progress.ISBNsent=ISBNsent
         sentDate=datetime.datetime.now()
         book_progress.ISBN_sentDate =sentDate.date() 
         book_progress.save()
         #return HttpResponseRedirect (reverse('dashboard'))
      elif 'ISBNdelivered' in request.POST:
         ISBNdelivered=request.POST.get("ISBNdelivered")  
         book_progress.ISBNdelivered=ISBNdelivered
         deliveredDate=datetime.datetime.now()
         book_progress.ISBN_deliveredDate =deliveredDate.date() 
         book_progress.save()

任何帮助将不胜感激。
谢谢你

i7uq4tfw

i7uq4tfw1#

这是因为label不是输入字段。因此,将不会提交标签数据。
在这种情况下,我的建议是
加载标签为隐藏字段的字段。

{% if book_progress.ISBNsent == 'True' %}
                          <div class="content column is-5">
                            <label class="checkbox" dir="rtl">
                              <i class="fa-solid fa-check has-text-success"></i>
                              تم التسليم
                            </label>
                            <input type="hidden" id="custId" name="ISBNsent" value="True">
                            </div>

相关问题