DRF 在序列化器檢查字段是否有效
我所知道的幾種方法:
- 在模型類中的
clean()檢查,最嚴(yán)格,確保數(shù)據(jù)庫中的字段內(nèi)容一定合法 - 在序列化器類中校驗(yàn)
- 在序列化器中針對(duì)特定的字段校驗(yàn)
- 在view中校驗(yàn)
這里先寫我試過的方法 2 和方法 3
2. 在序列化器類中校驗(yàn)
class ActionSerializer(serializers.ModelSerializer):
class Meta:
model = Action
fields = (
'action', 'handler', 'action_at', 'qif', 'comment'
)
def validate(self, data):
"""
validate 方法只有一個(gè)參數(shù) data, 是所有字段的值
由于 data 包含了所有字段的值,所以可以同時(shí)做多個(gè)條件判斷,這里只做了一個(gè)
"""
if data['qif'].status != enums.STATUS_ACCEPTED:
raise serializers.ValidationError(
"QIF has not been accepted by any handler yet."
)
return data
3. 在序列化器類中,針對(duì)字段校驗(yàn)
class ActionSerializer(serializers.ModelSerializer):
class Meta:
model = Action
fields = (
'action', 'handler', 'action_at', 'qif', 'comment'
)
def validate_qif(self, value):
"""
檢查 qif 對(duì)象的狀態(tài),是否為 “已接受”
"""
if value.status != enums.STATUS_ACCEPTED:
raise serializers.ValidationError(
"QIF has not been accepted by any handler yet."
)
return value
Reference