我正在使用Django REST框架构建RESTful API。我的一个模型看起来有点像这样:
class Zone(models.Model):
name = models.SlugField(max_length=50, unique=True)
... other fields
所以我构建了一个这样的序列化器:
class ZoneSerializer(serializers.ModelSerializer):
class Meta:
model = Zone
fields = ('name', ... other fields)
在发布数据以创建新区域时,我不确定我要负责多少验证以及应该自动进行多少验证。我尝试过以下测试用例:
name
是50个字符或更少字符的有效slug时,验证成功。name
是50+个字符的有效标记时,验证会失败,并显示相应的错误消息。name
是无效的段塞(例如“abc def”)时,验证成功并创建带有无效名称的区域。深入研究代码,我可以看到字段的长度由django.core.validators.MaxLengthValidator
run_validators
rest_framework/fields.py
中的validate_slug
验证,validate_name
未包含在验证人列表中。
我知道我可以在我的序列化程序中添加def validate_name(self, attrs, source):
"""
Make sure this is a slug field
"""
value = attrs[source]
if not validators.validate_slug(value):
raise serializers.ValidationError("Not a slug")
return attrs
方法,如下所示:
{{1}}
但这似乎有点矫枉过正。我在这里做错了吗?
答案 0 :(得分:2)
听起来那里有一个有效的拉取请求。 :) validate_slug
可能应该自动发生。
最佳行动方案:
干杯,
汤姆