Использование булева числа для задания условия появления формы
Я добавил булево значение в мою модель как 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 в модели, поскольку данные, требуемые в форме, являются частью той же модели, и если да, то каково решение?
Спасибо