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

Django Serializer的validate方法多条件校验触发ValidationError问题

问题排查结果

你的代码存在两处明确错误:

  • 类型匹配错误:attrs['author'].id 是UUID类型的主键值,self.context['request'].user 是User模型实例,二者类型完全不同,对比结果永远为False。and连接的两个条件只要有一个为False,整个判断就不成立,自然会直接抛出异常。
    你需要将对比逻辑修改为同类型对比,两种修改方案二选一即可:
# 方案1:对比主键值
attrs['author'].id == self.context['request'].user.id
# 方案2:直接对比模型实例
attrs['author'] == self.context['request'].user
  • 校验逻辑写反:你当前的判断逻辑是「只有发起关注的是当前用户 且 被关注用户的主页是私密状态」才允许通过校验,其他所有场景(包括被关注用户是公开主页的正常场景)都会直接抛出异常,完全不符合常规业务逻辑。
    常规的关注操作校验逻辑应该是:先校验操作人确实是当前登录用户(防止越权替他人发起关注),之后根据业务规则判断是否允许关注,修正后的参考代码如下:
def validate(self, attrs):
    attrs = super().validate(attrs)
    # 先校验操作人必须是当前登录用户
    if attrs['author'] != self.context['request'].user:
        raise ValidationError('Unauthorized Request')
    # 可根据业务调整权限规则,示例为仅允许关注公开主页的用户
    if not attrs['profile'].public_profile:
        raise ValidationError('Cannot follow private profile')
    return attrs

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:18:03