我正在使用 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”)时,验证成功并使用无效名称创建区域。
深入研究代码,我可以看到字段的长度 由 run_validators
中的 django.core.validators.MaxLengthValidator
验证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
但这似乎有点矫枉过正。我在这里做错了什么吗?
最佳答案
听起来那里有一个有效的拉取请求。 :) validate_slug
可能应该自动发生。
最佳行动方案:
- 仔细检查 Django slug 表单字段行为与 REST 框架序列化程序字段行为 - 它们是否完全不同?
- 为问题提出问题,记下您从 (1) 中确定的内容。
- 尝试编写一个失败的测试用例并将其作为拉取请求提交。
- 如果可能,用修复更新 PR。
- 利润!!!11!!!! (好吧,把你的名字写在致谢名单上,并因为贡献了修复而感到温暖)
干杯,
汤姆
关于django - 在 Django REST 框架中进行 SlugField 验证的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16636471/