python – Django空表单字段验证不适用于clean方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Django空表单字段验证不适用于clean方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5913字,纯文字阅读大概需要9分钟。
内容图文
![python – Django空表单字段验证不适用于clean方法](/upload/InfoBanner/zyjiaocheng/734/8bd14b1593c24fa08450bd1e3134589d.jpg)
我有一个django表单,我想验证当我要保存时字段不为空,让我们说例如“description”字段(charfield)….这是我的form.py代码:
from django.core.exceptions import ValidationError
class CostItemsForm(ModelForm):
groupid = forms.CharField(required=True)
def __init__(self, *args, **kwargs):
super(CostItemsForm, self).__init__(*args, **kwargs)
class Meta:
model = CostItems
fields = [
'description',
'usd_value',
'rer',
'pesos_value',
'supplier',
'position',
'observations',
'validity_date',
]
def clean_description(self):
des = self.cleaned_data['description']
if des==None:
raise ValidationError("Description cannot be empty")
return des
但没有任何反应,已经尝试过这样返回:返回self.cleaned_data并返回clean_description但仍然相同.
这是我的view.py:
class CostItemInsert(View):
template_name='cost_control_app/home.html'
def post(self, request, *args, **kwargs):
if request.user.has_perm('cost_control_app.add_costitems'):
form_insert = CostItemsForm(request.POST)
if form_insert.is_valid():
form_save = form_insert.save(commit = False)
form_save.save(force_insert = True)
messages.success(request, "Record created")
else:
messages.error(request, "Could not create record, please check your form")
else:
messages.error(request, "Permission denied")
form_group = GroupsForm()
form_subgroup= SubGroupsForm()
form_cost_item = CostItemsForm()
return render(request, self.template_name,{
"form_subgroup":form_subgroup,
"form_cost_item":form_cost_item,
"form_group":form_group,
})
和costitems模型:
class CostItems(ModelAudit):
cost_item = models.AutoField(primary_key = True, verbose_name = 'Item de costo')
group = models.ForeignKey(Groups, verbose_name = 'Grupo')
description = models.CharField(max_length = 100, verbose_name =' Descripcion')
usd_value = models.IntegerField(verbose_name ='Valor en USD')
rer = models.IntegerField(verbose_name = 'TRM negociado')
pesos_value = models.IntegerField(verbose_name = 'Valor en pesos')
supplier = models.ForeignKey(Suppliers, verbose_name = 'Proveedor')
position = models.ForeignKey(Positions, verbose_name = 'Cargo')
observations = models.TextField(max_length = 500, verbose_name = 'Observación')
validity_date = models.DateField(verbose_name = 'Fecha de vigencia')
def __str__(self):
return self.description
class Meta:
ordering = ['cost_item']
verbose_name = 'Item de costos'
verbose_name_plural = 'Items de costo'
这是我从html模板中的输入按钮调用的模态代码,我调用该视图:
<div class="modal fade bs-example-modal-lg" id="myModals" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">Registrar item de costo</h4>
</div>
<form method="post" action="{% url 'cost_control_app:cost_item_insert' %}">
{% csrf_token %}
<div class="modal-body">
<br/>
<div class="row">
{%include "partials/field.html" with field=form_cost_item.groupid|attr:"readonly:True" %}<br clear="all"/>
{%include "partials/field.html" with field=form_cost_item.description %}<br clear="all"/>
{%include "partials/field.html" with field=form_cost_item.usd_value|attr:"value:0"|attr:"id:id_usd_value" %}<br clear="all"/>
{%include "partials/field.html" with field=form_cost_item.rer|attr:"value:0"|attr:"id:id_rer_value" %}<br clear="all"/>
{%include "partials/field.html" with field=form_cost_item.pesos_value|attr:"value:0"|attr:"id:id_pesos_value" %}<br clear="all"/>
{%include "partials/field.html" with field=form_cost_item.supplier %}<br clear="all"/>
{%include "partials/field.html" with field=form_cost_item.position %}<br clear="all"/>
{%include "partials/field.html" with field=form_cost_item.observations %}<br clear="all"/>
{%include "partials/field.html" with field=form_cost_item.validity_date %}<br clear="all"/>
</br>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cerrar</button>
<button type="submit" class="btn btn-primary">Guardar</button>
</div>
</form>
</div>
</div>
</div>
最后,partials / fields.html也是:
{% load widget_tweaks%}
<div class="col-md-10">
<div class="form-group {% if field.errors %}has-error{% endif %}">
<label class="col-sm-2 control-label">{% if field.field.required %}{% endif %}{{ field.label }}<label style="color:red">*</label></label>
<div class="col-sm-10">
{% if type == 'check' %}
{{ field|add_class:"check" }}
{% elif type == 'radio' %}
{{ field|add_class:"radio" }}
{% else %}
{{ field|add_class:"form-control" }}
{% endif %}
</div>
{% for error in field.errors %}
<div class="error_msg">- {{ error }}</div>
{% endfor %}
</div>
</div>
有帮助吗?
提前致谢
解决方法:
des never将等于None,默认值至少为空字符串
如果不是des:当des为空时,应该足以满足你的if语句
如果您真正要检查的是否为空,则可以通过将blank设置为False来在模型中执行此操作
description = models.CharField(max_length = 100, blank=False, verbose_name =' Descripcion')
If a field has blank=True, form validation will allow entry of an empty value. If a field has blank=False, the field will be required.
Yeah, but isn’t validation error supossed to show the alert inside the form before user can proceed to save ??
是的,但是在您向用户显示之前覆盖了表单,这可以通过在方法顶部定义表单然后进一步向下覆盖来轻松解决
def post(self, request, *args, **kwargs):
form_group = GroupsForm()
form_subgroup= SubGroupsForm()
form_cost_item = CostItemsForm()
if request.user.has_perm('cost_control_app.add_costitems'):
form_cost_item = CostItemsForm(request.POST)
if form_cost_item.is_valid():
form_save = form_cost_item.save(commit = False)
form_save.save(force_insert = True)
messages.success(request, "Record created")
else:
messages.error(request, "Could not create record, please check your form")
else:
messages.error(request, "Permission denied")
return render(request, self.template_name,{
"form_subgroup":form_subgroup,
"form_cost_item":form_cost_item,
"form_group":form_group,
})
内容总结
以上是互联网集市为您收集整理的python – Django空表单字段验证不适用于clean方法全部内容,希望文章能够帮你解决python – Django空表单字段验证不适用于clean方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。