Django CreateView绑定ModelForm后无法提交保存数据如何解决?
问题根因
提交失败的核心原因是test_case_list字段绑定的验证器和实际存储值格式不匹配:
validate_comma_separated_integer_list是Django内置验证器,仅允许字段值为逗号分隔的纯整数列表,比如1,2,3这类格式- 你实际存入该字段的值是
用例名称*执行次数拼接后的逗号分隔字符串,包含字母、特殊符号,不符合验证规则。表单验证失败后Django会直接返回当前表单页,不会执行数据保存逻辑,因此出现页面不跳转、已选列表清空、无新增记录的现象。
你删除验证器后验证逻辑消失,自然可以正常提交。
逗号分隔字符串验证方案
Django没有内置通用的逗号分隔字符串验证器,你可以根据自己的业务格式自定义验证器,示例如下:
from django.core.exceptions import ValidationError def validate_comma_separated_case_list(value): # 按逗号拆分每个条目 items = value.split(',') for item in items: # 校验每个条目是否符合 用例名*次数 的格式 if '*' not in item: raise ValidationError(f"条目[{item}]格式错误,需为 [用例名*执行次数] 格式") case_name, count = item.split('*', 1) if not count.isdigit(): raise ValidationError(f"条目[{item}]的执行次数必须为数字") return value
之后把自定义验证器加到模型字段上即可:
test_case_list = models.CharField(max_length=200, validators=[validate_comma_separated_case_list], default = "1")
其他优化点
你测试时点击测试按钮会清空已选内容,是因为你把测试按钮的type设为了submit,点击会触发表单提交行为,改成button即可避免该问题:
<input type="button" value="测试" onclick="testButton()">
内容的提问来源于stack exchange,提问作者Wason
相关产品推荐
相关产品推荐

