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 &nbsp</label>
<input type="checkbox" value="Scope" id="Scope" name="checkbox_data">
<label for="Scope"> Scope &nbsp</label>
<input type="checkbox" value="ISMS" id="ISMS" name="checkbox_data">
<label for="ISMS"> ISMS &nbsp</label>
<input type="checkbox" value="Methodology" id="Methodology" name="checkbox_data">
<label for="Methodology"> Methodology &nbsp</label>
<input type="checkbox" value="Recommendation" id="Recommendation" name="checkbox_data">
<label for="Recommendation"> Recommendation &nbsp</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

second:: forms.py是什么?forms.py和models.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 &nbsp</label>
<input type="hidden" name="Scope" value="0" />
<input type="checkbox" name="Scope" value="1" id="Scope" />
<label for="Scope"> Scope &nbsp</label>
<input type="hidden" name="ISMS" value="0" />
<input type="checkbox" name="ISMS" value="1" id="ISMS" />
<label for="ISMS"> ISMS &nbsp</label>
<input type="hidden" name="Methodology" value="0" />
<input type="checkbox" name="Methodology" value="1" id="ISMS" />
<label for="Methodology"> Methodology &nbsp</label>
<input type="hidden" name="Recommendation" value="0" />
<input type="checkbox" name="Recommendation" value="1" id="Recommendation" />
<label for="Recommendation"> Recommendation &nbsp</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表单为您提供了各种各样的特性,这些特性给您带来了很多好处,比如更简单的验证方式和更简洁的代码。(当然有权衡)

因此,我们可以认为它们之间的主要区别在于一个与数据库直接相关,而另一个与数据库无关。

作为例子,让我们把下面的代码转换成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}

最新更新