DRF 在序列化器检查字段是否有效
我所知道的几种方法:
- 在模型类中的
clean()
检查,最严格,确保数据库中的字段内容一定合法 - 在序列化器类中校验
- 在序列化器中针对特定的字段校验
- 在view中校验
这里先写我试过的方法 2 和方法 3
2. 在序列化器类中校验
class ActionSerializer(serializers.ModelSerializer):
class Meta:
model = Action
fields = (
'action', 'handler', 'action_at', 'qif', 'comment'
)
def validate(self, data):
"""
validate 方法只有一个参数 data, 是所有字段的值
由于 data 包含了所有字段的值,所以可以同时做多个条件判断,这里只做了一个
"""
if data['qif'].status != enums.STATUS_ACCEPTED:
raise serializers.ValidationError(
"QIF has not been accepted by any handler yet."
)
return data
3. 在序列化器类中,针对字段校验
class ActionSerializer(serializers.ModelSerializer):
class Meta:
model = Action
fields = (
'action', 'handler', 'action_at', 'qif', 'comment'
)
def validate_qif(self, value):
"""
检查 qif 对象的状态,是否为 “已接受”
"""
if value.status != enums.STATUS_ACCEPTED:
raise serializers.ValidationError(
"QIF has not been accepted by any handler yet."
)
return value
Reference