Можно включить дополнительный вход в систему отладочная сборка и отключить его для сборки конечных версий без издержек булевой проверки. Так, вместо:
void Log::trace(const char *pszMsg) {
if (!bDebugBuild) {
return;
}
// Do the logging
}
...
log.trace("Inside MyFunction");
Вы можете иметь:
#ifdef _DEBUG
#define LOG_TRACE log.trace
#else
#define LOG_TRACE void
#endif
...
LOG_TRACE("Inside MyFunction");
, Когда _DEBUG не будет определен, это не генерирует кода вообще. Ваша программа будет работать быстрее, и текст для входа трассировки не будет скомпилирован в Ваш исполняемый файл.
Я обнаружил источник ошибки после того, как погрузился в исходный код Django forms.py
.
Кажется, что если поле оставить пустым, в форме появится сообщение ValidationError для этого поля после вызова field.clean ()
, но тогда он не вызывает clean_
, но по-прежнему вызывает основной чистый метод класса. Чтобы иметь дело с чистым методом, который использует эти пустые поля, вы должны сделать следующее:
def clean(self):
try:
password = self.cleaned_data['password']
# etc
except KeyError:
raise ValidationError('The password field was blank.')
return self.cleaned_data
Вы можете переопределить это, используя required = False
в ваших конструкторах полей.
username = forms.CharField(max_length=30, required=False)
password = forms.CharField(max_length=30,widget=forms.PasswordInput, required=False)
Это кажется нелогичным для вашего примера, но может быть полезно в других случаях