You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django REST Framework序列化器验证名称重复时触发AttributeError

解决DRF序列化器validate_name方法中的AttributeError问题

问题重现

我在Django REST Framework中编写序列化器的validate_name方法,用于验证联系人名称是否已存在,代码如下:

def validate_name(self, value):
    qs = contact.objects.filter(name=value)
    if qs.exists():
        raise serializers.validationError(f"{value} is already in contact name")
    return value

运行时触发如下错误:

in validate_name raise serializers.validationError(f"{value} is already in contact name")
AttributeError: module 'rest_framework.serializers' has no attribute 'validationError'

解决方案

1. 修正异常类拼写错误

错误核心是大小写拼写错误:DRF提供的验证异常类是ValidationError(首字母大写,第二个E也大写),你写成了小写开头的validationError,导致找不到对应属性。

修正后的基础验证代码:

from rest_framework import serializers

def validate_name(self, value):
    qs = contact.objects.filter(name=value)
    if qs.exists():
        raise serializers.ValidationError(f"{value} 已存在于联系人名称中")
    return value

2. 额外优化建议

  • 模型类命名规范:Python类名应遵循大驼峰规则,建议将contact改为Contact,避免后续出现其他潜在问题。
  • 兼容更新场景:如果该序列化器同时用于创建和更新操作,需要排除当前实例,否则更新时会因为自身名称存在而触发验证错误。优化后的代码:
def validate_name(self, value):
    qs = Contact.objects.filter(name=value)
    # 排除当前正在更新的实例
    if self.instance:
        qs = qs.exclude(pk=self.instance.pk)
    if qs.exists():
        raise serializers.ValidationError(f"{value} 已存在于联系人名称中")
    return value

内容的提问来源于stack exchange,提问作者sridharan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:20:27