【问题标题】:Django Rest framwork validation: Mark field as errorDjango Rest 框架验证:将字段标记为错误
【发布时间】:2014-11-19 02:09:18
【问题描述】:

我开始为我的应用程序使用 django-rest-framework,但我对序列化程序验证有疑问。 在文档中,我找到了这个用于对象验证的示例:

from rest_framework import serializers

class EventSerializer(serializers.Serializer):
    description = serializers.CharField(max_length=100)
    start = serializers.DateTimeField()
    finish = serializers.DateTimeField()

    def validate(self, attrs):
        """
        Check that the start is before the stop.
        """
        if attrs['start'] > attrs['finish']:
            raise serializers.ValidationError("finish must occur after start")
        return attrs

这将返回以下内容:

{"non_field_errors": ["finish must occur after start"]}

我的问题是,如何找出导致验证失败的字段? 在这种情况下 attrs['start'] 和 attrs['finish']。 最后我想要这样的东西:

{"non_field_errors": ["finish must occur after start"], 
 "start": ["finish must occur after start"], 
 "finish": ["finish must occur after start"]}  

这样我就可以标记负责的表单字段。 我希望这个问题很清楚。谢谢!

【问题讨论】:

    标签: django validation django-rest-framework django-validation


    【解决方案1】:

    当您创建ValidationError 时,您可以传入字典而不是字符串。字典期望key 是字段名,value 是错误字符串。

    def validate(self, attrs):
        """
        Check that the start is before the stop.
        """
        if attrs['start'] > attrs['finish']:
            raise serializers.ValidationError({"finish": "finish must occur after start"})
        return attrs
    

    这应该会产生如下输出:

    {"start": ["finish must occur after start"], 
     "finish": ["finish must occur after start"]}
    

    这听起来像您正在寻找的东西。

    【讨论】:

    • 这正是我想要的。谢谢!
    猜你喜欢
    • 2015-08-16
    • 1970-01-01
    • 2020-04-24
    • 2015-08-17
    • 1970-01-01
    • 2017-03-09
    • 2018-08-09
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多