Django как сохранить данные из чекбокса в базу данных
Я хочу добавить данные из чекбокса в базу данных. Посмотрел несколько видео, но ничего не получилось.
checkbox.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Checkbox</title>
</head>
<body>
<form action="" method="post">
{%csrf_token%}
<div class="form-check">
<h5>Checkbox_report</h5>
<input type="checkbox" value="Executive_summary" id="Executive_summary" name="checkbox_data">
<label for="Executive_summary"> Executive summary  </label>
<input type="checkbox" value="Scope" id="Scope" name="checkbox_data">
<label for="Scope"> Scope  </label>
<input type="checkbox" value="ISMS" id="ISMS" name="checkbox_data">
<label for="ISMS"> ISMS  </label>
<input type="checkbox" value="Methodology" id="Methodology" name="checkbox_data">
<label for="Methodology"> Methodology  </label>
<input type="checkbox" value="Recommendation" id="Recommendation" name="checkbox_data">
<label for="Recommendation"> Recommendation  </label>
</div>
<button type="submit">submit</button>
</form>
</body>
</html>
views.py
from collections import Counter
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request, 'home.html', {"text": "hello home"})
def about(request):
return render(request, 'about.html', {"text": "hello about"})
def checkbox(request):
if request.method == 'POST':
checkbox_data = request.POST.getlist('checkbox_data')
for i in checkbox_data:
print(i)
return render(request, 'checkbox.html')
Я хочу добавить 1
когда пользователь отмечает любой из чекбоксов, а те, которые не отмечены, добавить 0
второе:: что такое forms.py? в чем основная разница между forms.py и manage.py
Сначала прямое решение вашего вопроса, в сыром формате. Следуя этому ответу:
checkbox.html
<form action="" method="post">
{%csrf_token%}
<div class="form-check">
<h5>Checkbox_report</h5>
<input type="hidden" name="Executive_summary" value="0" />
<input type="checkbox" name="Executive_summary" value="1" id="Executive_summary" />
<label for="Executive_summary"> Executive summary  </label>
<input type="hidden" name="Scope" value="0" />
<input type="checkbox" name="Scope" value="1" id="Scope" />
<label for="Scope"> Scope  </label>
<input type="hidden" name="ISMS" value="0" />
<input type="checkbox" name="ISMS" value="1" id="ISMS" />
<label for="ISMS"> ISMS  </label>
<input type="hidden" name="Methodology" value="0" />
<input type="checkbox" name="Methodology" value="1" id="ISMS" />
<label for="Methodology"> Methodology  </label>
<input type="hidden" name="Recommendation" value="0" />
<input type="checkbox" name="Recommendation" value="1" id="Recommendation" />
<label for="Recommendation"> Recommendation  </label>
</div>
<button type="submit">submit</button>
</form>
views.py:
def checkbox(request):
if request.method == 'POST':
exec_summary = request.POST.get('Executive_summary')
scope = request.POST.get('Scope')
isms = request.POST.get('ISMS')
methodology = request.POST.get('Methodology')
recommendation = request.POST.get('Recommendation')
print(f'{exec_summary}{scope}{isms}{methodology}{recommendation}')
return render(request, 'checkbox.html')
# Print Output Sample (0s and 1s):
10100
Теперь, чтобы ответить на ваш второй вопрос и привести еще один пример:
Модели - это карты таблиц базы данных (обычно одна модель связана с одной таблицей), с моделями Django предоставляет вам автоматически создаваемый API доступа к базе данных (другими словами, объектно-реляционное отображение или ORM).
С другой стороны, Формы используются для обработки ввода данных от ваших посетителей/пользователей. Django forms предлагает вам множество возможностей, которые дают вам такие преимущества, как более простой способ валидации и гораздо более чистый код. (Конечно, есть и компромиссы)
Итак, можно утверждать, что основное различие между ними заключается в том, что один из них напрямую связан с базой данных, а другой - нет.
В качестве примера преобразуем этот код в форму Django:
forms.py: (булевы поля автоматически отображаются как флажки)
from django import forms
class CheckBoxForm(forms.Form):
exec_summary = forms.BooleanField(required=False)
scope = forms.BooleanField(required=False)
isms = forms.BooleanField(required=False)
methodology = forms.BooleanField(required=False)
recommendation = forms.BooleanField(required=False)
form_checkbox.html:
<body>
<form action="" method="post">
{%csrf_token%}
{{form.as_p}}
<button type="submit">submit</button>
</form>
</body>
views.py:
from .forms import CheckBoxForm
def form_checkbox(request):
if request.method == 'POST':
form = CheckBoxForm(request.POST or None)
if form.is_valid():
print(form.cleaned_data)
else:
form = CheckBoxForm()
context = {'form': form}
return render(request, 'form_checkbox.html', context)
# Print Output Sample
{'exec_summary': True, 'scope': False, 'isms': True, 'methodology': False, 'recommendation': False}