【问题标题】:Rest framework serializer read onlyRest 框架序列化器只读
【发布时间】:2015-05-06 16:31:47
【问题描述】:

我想验证用户是否从只读字段更改了值。如果值已更改,则验证应返回错误消息。在我的情况下 start_date 始终是常量(从数据库中读取)。我想检查用户是否修改了这个值。

序列化器:

class IntervalSerializer(serializers.Serializer):

    start_date = serializers.DateField(allow_null=False, input_formats=INPUT_FORMATS_DATE)
    end_date = serializers.DateField(allow_null=False, input_formats=INPUT_FORMATS_DATE)

我的看法:

START_DATE = get_start_date()
serializer = IntervalSerializer(data=data)
if serializer.is_valid():
    ...

更新

当我将 read_only 设置为 True 时,我没有任何验证错误。我想检查用户是否更改了此字段。比如:

START_DATE = get_start_date() # from db
data['start_date'] = get_not_allowed() #when user send date i.e. in curl
serializer = IntervalSerializer(data=data, initial={'start_date': START_DATE})
if serializer.is_valid(): #should not pass because data['start_date'] is overriden

IntervalSerializer(data=data)

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    read_only 设置为 True 怎么样? 见here

    所以,基本上,你会:

    start_date = serializers.DateField(read_only=True, allow_null=False, input_formats=INPUT_FORMATS_DATE)
    

    【讨论】:

    • 验证通过,但当用户更改字段只读时我没有任何错误
    • @user3455448 如果提供的数据 start_date 与旧的不匹配,您可以在序列化程序的 update 方法内引发异常。
    猜你喜欢
    • 2013-08-21
    • 2017-03-04
    • 2015-06-29
    • 2020-03-22
    • 2015-10-29
    • 2020-05-08
    • 2021-10-19
    • 2018-12-13
    • 2016-03-31
    相关资源
    最近更新 更多