Использование булева числа для задания условия появления формы

Я добавил булево значение в мою модель как Active, где я хочу, чтобы оно было по умолчанию FALSE и если пользователь изменит его на TRUE как в active, чтобы появилась форма. Вот что я сделал на данный момент.

Я создал представление для булеана:

class workout_details(DetailView):
    model = Workout
    template_name = 'my_gym/start_workout.html'
    context_object_name = 'workout'

    def get_context_data(self, **kwargs):
        exercises = Exercise.objects.filter(workout_id=self.object)
        p = Log.objects
        context = super().get_context_data(**kwargs)
        context['exercises'] = exercises
        context['form'] = LogForm()
        context['p'] = p
        return context

def change_activity (request):
    if request.is_ajax() and request.method=='POST':
        log = Log.objects.get()
        log.active = True if request.POST.get('active') == 'true' else False
        log.save()
        data = {'status':'success', 'active':log.active}
        return JsonResponse(data, status=200)
    else:
        data = {'status':'error'}
        return JsonResponse(data, status=400)

и я добавил ссылки:

    path('changeactivity', change_activity, name="change_activity"),

Вот шаблон для изменения активной опции:

        <div>
          <button {% if not p.active %} {% endif %} id="customSwitches" onclick="start();" type="button">
            Start the activity
          </button>
        </div>
              <script type="text/javascript">
                  $(document).ready(function() {
                      // send request to change the active state on customSwitches toggle
                      $("#customSwitches").on("change", function() {
                          $.ajax({
                              url: "{% url 'my_gym:change_activity' %}",
                              data: {
                                  csrfmiddlewaretoken: "{{ csrf_token }}",
                                  active: this.disabled // true if checked else false
                              },
                              type: "POST",
                              dataType : "json",
                          })
                          // $.ajax().done(), $.ajax().fail(), $ajax().always() are upto you. Add/change accordingly
                          .done(function(data) {
                              console.log(data);
                              // show some message according to the response.
                              // For eg. A message box showing that the status has been changed
                          })
                          .always(function() {
                              console.log('[Done]');
                          })
                      })
                  });
              </script>

Вот раздел формы, который отображается, если active равен true:

  {% if p.active %}
  <form action="......."></form>
  {% endif %}

вот модель:

class Log(models.Model):
    active = models.BooleanField(default=False)

Мой вопрос: В настоящее время, когда форма не отображается и когда я нажимаю на кнопку, чтобы сделать ее активной, она не отображается, является ли поток последовательности правильным и в чем причина того, что булево изменение не правильно отправлено на сервер, чтобы быть измененным на active == True и как это исправить.

Другой вопрос, должен ли я избегать использования boolean в модели, поскольку данные, требуемые в форме, являются частью той же модели, и если да, то каково решение?

Спасибо

Вернуться на верх