Form.save(commit=False) ведет себя по-разному в Django 1.2.3?

До сегодняшнего дня я использовал Django 1.1. Чтобы не отставать от времени, я решил обновить свою среду Django для использования Django 1.2.3. К сожалению, я столкнулся с проблемой.

Следующий код не вызывает ValueError в 1.1:

        instance = FormClass(
            request.POST,
            instance=existing_instance
        ).save(commit=False)

Однако теперь, когда я обновился, он каждый раз вызывает ошибку ValueError. У меня есть поле SSN, которое я отправляю как часть моей формы, и я удаляю дефисы перед выполнением вызова instance.save(). К сожалению, ошибка ValueError возникает из-за того, что Django считает, что мое значение SSN слишком длинное (оно ожидает 9 символов и получает 11 - 123-45-6789).

Я просмотрел документы Django и не смог найти ничего, связанного с этим изменением. Есть идеи, что происходит? Я всегда думал, что целью параметра "commit=False" было разрешить предварительную обработку данных перед сохранением информации.

Я что-то пропустил?

1 ответ

Решение

Согласно 1.2 документов на save() метод "Если вы вызовите save() с commit=False, то он вернет объект, который еще не был сохранен в базе данных". Поэтому я не уверен, почему произошли изменения в функциональности, но возможно, что в версии 1.1 код проверки / проверки выполнялся только тогда, когда объект был сохранен в базе данных, а в версии 1.2 это происходит раньше (до сохранения объекта),

В любом случае, если вы очищаете данные, которые вводятся в форму, вам, вероятно, следует очищать их в FormClass:

def clean_ssn(self):
    data = re.sub(r'[^0-9]','',self.cleaned_data['ssn'])
    #validation code here
    return data

Это должно по крайней мере решить проблему...

Другие вопросы по тегам