python - Django表单复选框选择不起作用
问题描述
我有一个带有“接受服务条款”复选框的 Django 表单,但如果我选中它,我的应用程序会阻止请求并显示“您必须接受我们的服务条款”消息。
这是我的代码:
表格.py
class ProfileModelForm(ModelForm):
class Meta:
model = UserProfile
fields = ['u_fullname',
'u_job',
'u_country',
'u_email',
'u_terms',
]
def clean(self):
cleaned_data = super(ProfileModelForm, self).clean()
u_fullname = cleaned_data.get('u_fullname')
u_job = cleaned_data.get('u_job')
u_country = cleaned_data.get('u_country')
u_email = cleaned_data.get('u_email')
u_terms = cleaned_data.get('u_terms')
if not u_terms:
raise forms.ValidationError("Please read and accept our Terms of Service")
if not u_fullname and not u_job and not u_country and not u_terms:
raise forms.ValidationError('You have to write something!')
return cleaned_data
字段 u_terms 在我的模型中是一个布尔字段。
意见.py:
if request.method == 'POST':
if 'user_reg' in request.POST:
form = ProfileModelForm(request.POST)
if form.is_valid():
instance = form.save(commit=False)
#Create user and get the id
n_user = User.objects.create_user(username=request.POST['u_email'],
email=request.POST['u_email'],
password=request.POST['u_password'])
instance.user = User.objects.get(id=n_user.id)
instance.u_profile = 'U'
print("TERMS-->",request.POST['u_terms'])
instance.save()
return # Put return here
else:
messages.error(request, "Error")
#form = ProfileModelForm()
return render(request, 'login.html', {'form': form})
elif 'register' in request.POST:
pass
elif 'company' in request.POST:
pass
以及与我的复选框相关的 html 模板部分:
<div class="col-lg-12 no-pdd">
<div class="checky-sec st2">
<div class="fgt-sec">
<input type="checkbox" name="cc" id="c2" value={{ form.u_terms }}>
<label for="c2">
<span></span>
</label>
<small>Yes, I understand and agree to the workwise Terms & Conditions.</small>
</div><!--fgt-sec end-->
</div>
</div>
我想问题出在我的 html 部分,但我不知道如何从复选框管理布尔字段。
有人可以帮助我吗?
解决方案
您元素的“名称”属性与<input>
表单预期的 POST 属性不匹配:cc
!= u_terms
。
您可以通过两种方式解决此问题:
用于
{{ form.u_terms }}
渲染整个<input>
标签。请注意,您将其放入 value 属性中,这是错误的(查看浏览器中的源代码,您会明白我的意思)。{{ form.u_terms }} {{ form.u_terms.label_tag }}
如果您必须自定义您的属性
<input>
(这里似乎不是这种情况),请确保您仍然引用表单的字段,以便各种属性正确:<input type="checkbox" name="{{ form.u_terms.html_name }}" id="{{ form.u_terms.id_for_label }}" class="some-custom-class"> <label for="{{ form.u_terms.id_for_label }}"><span></span></label>
推荐阅读
- javascript - 检测 Javascript 函数代码中的更改
- javascript - 根据 url 激活左侧栏的菜单
- c# - .NET Framework 中的 public static DateTime ToDateTime(DateTime value) 的目的是什么?
- reactjs - 我想将获取数据传递到我的减速器
- bash - 在 bash 中搜索并写入一个非常大的文件的行
- javascript - 刷新缓存时设置动态图像比例中断的脚本
- snmp - net-snmp 标量的缓慢注册
- c# - 使用流利的 nhibernate 排除私有字段
- python - 如何将我的python文件保存在特定文件夹中
- amazon-web-services - 使用 kibana 连接到远程弹性搜索时出现身份验证错误?