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
相关产品推荐
相关产品推荐

