【问题标题】:REST django field validator based on other field in same model基于同一模型中其他字段的 REST django 字段验证器
【发布时间】:2014-08-27 07:58:26
【问题描述】:

如何使用 django ModelSerializer 基于同一模型中的其他字段使用验证器验证模型属性。示例型号代码:

class LeadSerializer(serializers.ModelSerializer):
    class Meta:
        model = Lead
        fields = (
            'name','mobile','email','source',
            'referred_by_biz',
            'referred_by_ap')

如果输入的来源是'B',那么referred_by_biz'(外键值)不能为空,如果来源是'A',那么'referred_by_ap'不能为空/null(外键)。如何在 ussign validate 方法中完成此操作?我刚刚开始使用 REST 框架。我正在使用 curl 来获取相同的 url。

【问题讨论】:

    标签: python django rest


    【解决方案1】:

    这样的事情应该可以工作:

    def validate(self, attrs):
        if attrs['source'] == 'A' and attrs['referred_by_ap'] == '':
            raise serializers.ValidationError('referred_by_ap cannot be blank')
        if attrs['source'] == 'B' and attrs['referred_by_biz'] == '':
            raise serializers.ValidationError('referred_by_biz cannot be blank')
        return attrs
    

    【讨论】:

    • 我已经尝试了上面的它没有工作,因此我发布了
    • 哪部分不起作用?该方法是否从未被调用(只有在所有其他验证通过时才会被调用)还是无效值仍然通过并且不引发异常?
    • 方法从未被调用,也不会引发任何异常
    • 好的,但是否会出现一些验证错误?我不知道你的模型是如何定义的,但是如果外键没有用 blank=True 和 null=True 定义,外键可能会引发它们自己的字段所需错误,这可能是永远不会调用 validate 的原因。
    • stackoverflow.com/users/2977085/zorba 外键确实是用空白=True 和 null=True 调用的。这里外键的选择取决于源值。因此,逻辑是以这种方式实现的。您能否建议在这种情况下如何执行验证?
    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 2016-06-10
    • 2013-07-19
    • 2020-06-23
    • 2015-07-24
    • 2016-01-20
    • 1970-01-01
    相关资源
    最近更新 更多