Django REST framework serializer 跟 model 无关的只写(write_only) field 的处理
有时候想在 DRF 的 api 里塞一些跟 model 无关的,但又是必须要处理的数据,比如设密码时,为了保证输入无误第二次输入的 password,这种信息一般设为只写。
这个时候 serializers.py 里,把 validate 方法重载一下,在里面删掉 request.data 里实际上 model 不需要的数据就 ok 了。
-
class AccountListSerializer(serializers.HyperlinkedModelSerializer):
-
password = serializers.CharField(write_only=True, style={'input_type': 'password'})
-
confirm_password = serializers.CharField(write_only=True, style={'input_type': 'password'})
-
def validate(self, data):
-
del data['confirm_password']
-
return data
-
class Meta:
-
model = Account
-
fields = ('password', 'confirm_password')
当然,在 views.py 里,需要校验一下 password 和 confirm_password 是否输入了,如果输入了,是否一致
-
if not request.data.get('password') or not request.data.get('confirm_password'):
-
raise serializers.ValidationError("Please input password and confirm it!")
-
if request.data.get('password') != request.data.get('confirm_password'):
-
raise serializers.ValidationError("Passwords do NOT match!")
最新评论