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

Django注册时referral_code字段非必填问题解决求助

Django注册时推荐码非必填问题修复

问题原因

模型中referral_code已配置blank=True, null=True,但序列化器的referral_code字段仅设置了required=False,未开启allow_blank=True。DRF的CharField默认不允许空白字符串,所以当请求传入空字符串(如示例中的" ")时,会触发默认验证报错。

修复方案

1. 修改序列化器字段配置

在serializers.py的RegisterSerializer中,给referral_code字段添加allow_blank=True参数:

class RegisterSerializer(serializers.Serializer):
    # 其他字段保持不变
    referral_code = serializers.CharField(required=False, write_only=True, allow_blank=True)

2. 优化推荐码处理逻辑

在save方法中,先对推荐码做去空白处理,避免无效的空白值进入后续逻辑:

def save(self, request):
    # 其他代码保持不变
    referral_code = self.cleaned_data.get('referral_code')

    # 优化后的推荐码处理逻辑
    if referral_code:
        cleaned_code = referral_code.strip()
        if cleaned_code:
            referred_by = User.objects.filter(referral_code=cleaned_code).first()
            if referred_by:
                user.referred_by = referred_by
                referred_by.referred_users_count += 1
                referred_by.save()
    
    user.save()
    return user

验证效果

修改后,以下三种情况都能正常完成注册:

  • 请求中不包含referral_code字段
  • referral_code传入空字符串""
  • referral_code传入空白字符串" "

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 02:25:20