Form.save (commit = False) ведет себя по-разному в Django 1.2.3? - PullRequest
1 голос
/ 21 сентября 2010

До сегодняшнего дня я использовал 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 Ответ

3 голосов
/ 21 сентября 2010

В соответствии с документами 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

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

...