2015-03-05 2 views
1

Я хочу проверить, было ли значение изменено пользователем из поля только для чтения. Если значение было изменено, валидация должна вернуть сообщение об ошибке. В моем случае start_date всегда является константой (читается из базы данных). Я хочу проверить, изменило ли пользователь это значение.Сериализатор остальной среды только для чтения

Serializer:

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 Истина у меня нет каких-либо ошибок проверки. Я хочу проверить, изменилось ли это поле пользователем. Что-то вроде:

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 (данные = данные)

ответ

3

Как насчет установки READ_ONLY в True? См here

Так что, в принципе, вы бы:

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

проверок проходят, но у меня нет какого-либо ошибка, когда поле изменения пользователя read_only –

+0

@ user3455448 вы можете вызвать исключение внутри 'update' методу из сериализатор, если предоставленный данными start_date не соответствует старому. – soulseekah

Смежные вопросы