我正在使用 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 多个字符的有效 slug 时,验证失败并显示相应的错误消息。 - 什么时候
name
是一个无效的 slug(例如“abc def”),验证成功并使用无效名称创建一个区域。
深入研究代码,我可以看到字段的长度由django.core.validators.MaxLengthValidator
in run_validators
in验证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
但这似乎有点矫枉过正。我在这里做错了吗?