django 怎么用 modelForm 进行数据验证,验证在StaffInfo中的tel属性是有效电话号码,如果有错误的话将“电话号码不合法”加入到 form.field.errors()里面,由HTML进行显示输出
时间: 2024-03-21 15:43:14 浏览: 133
你可以这样定义一个 `ModelForm`,并在其中重写 `clean_tel` 方法进行电话号码验证:
```python
from django import forms
from django.core.exceptions import ValidationError
from .models import StaffInfo
class StaffInfoForm(forms.ModelForm):
class Meta:
model = StaffInfo
fields = '__all__'
def clean_tel(self):
tel = self.cleaned_data['tel']
if not is_valid_tel(tel):
raise ValidationError('电话号码不合法')
return tel
def is_valid_tel(tel):
# 在这里编写电话号码验证逻辑
return True # 或者 False
```
在视图函数中,你可以这样使用 `StaffInfoForm` 进行数据验证:
```python
from django.shortcuts import render
from .forms import StaffInfoForm
def staff_info_view(request):
if request.method == 'POST':
form = StaffInfoForm(request.POST)
if form.is_valid():
# 表单数据验证通过,可以保存到数据库中
form.save()
else:
form = StaffInfoForm()
return render(request, 'staff_info.html', {'form': form})
```
在 HTML 模板中,你可以这样显示表单验证错误消息:
```html
{% if form.errors %}
<ul>
{% for field in form %}
{% for error in field.errors %}
<li>{{ error }}</li>
{% endfor %}
{% endfor %}
</ul>
{% endif %}
<form method="post">
{% csrf_token %}
{% for field in form %}
<div class="fieldWrapper">
{{ field.label_tag }} {{ field }}
{% if field.help_text %}
<p class="help">{{ field.help_text|safe }}</p>
{% endif %}
{% for error in field.errors %}
<p class="error">{{ error }}</p>
{% endfor %}
</div>
{% endfor %}
<input type="submit" value="提交">
</form>
```
阅读全文