我定义了两个class,一个是员工staff ,一个是紧急联系人emergency,并设置了formfield_for_dbfield对emergency中的电话号码合法性检查进行了补充,为什么在添加staff时输入不合法的emergency电话号码仍然可以顺利保存?为什么他没有给出错误提示?
时间: 2024-03-27 16:40:02 浏览: 43
在 Django Admin 中,`formfield_for_dbfield` 方法只在编辑表单中生效,而不是在创建表单中生效。这意味着,如果您在创建新的 `staff` 对象时遇到问题,例如输入了不合法的紧急联系人电话号码,那么 Django 在保存该员工记录时不会进行验证。
要在创建表单中应用自定义验证,您需要使用 `clean()` 方法。您可以在 `staff` 模型类中添加以下代码:
```python
from django.core.exceptions import ValidationError
class Staff(models.Model):
# your existing fields here
def clean(self):
if self.emergency.phone_number is not None and len(self.emergency.phone_number) != 11:
raise ValidationError('Invalid phone number')
super().clean()
```
在上面的示例中,我们使用 `clean()` 方法来验证紧急联系人的电话号码。如果电话号码无效,我们会引发一个 `ValidationError`,从而阻止保存员工记录并显示错误消息。
请注意,`clean()` 方法只在使用 Django 表单验证时才会调用。如果您正在使用 Django Rest Framework 或其他库进行验证,您需要查看相关文档以了解如何应用自定义验证。
阅读全文