在Django REST框架中推荐的SlugField验证方法是什么?

时间:2013-05-19 15:47:46

标签: django django-rest-framework

我正在使用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)

在发布数据以创建新区域时,我不确定我要负责多少验证以及应该自动进行多少验证。我尝试过以下测试用例:

  1. name是50个字符或更少字符的有效slug时,验证成功。
  2. name是50+个字符的有效标记时,验证会失败,并显示相应的错误消息。
  3. name是无效的段塞(例如“abc def”)时,验证成功并创建带有无效名称的区域。
  4. 深入研究代码,我可以看到字段的长度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}}

    但这似乎有点矫枉过正。我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

听起来那里有一个有效的拉取请求。 :) validate_slug可能应该自动发生。

最佳行动方案:

  1. 根据REST框架序列化程序字段行为仔细检查Django slug表单字段行为 - 它们肯定不同吗?
  2. 提出问题的门票,注意你从(1)确定的内容。
  3. 尝试编写失败的测试用例并将其作为拉取请求提交。
  4. 如果可能,请使用修复程序更新PR。
  5. 利润!!! 11 !!!! (好吧,在学分中得到你的名字,并为贡献修复得到一种温暖的感觉)
  6. 干杯,

    汤姆