이 진짜 고통이다. 나는이 문제를 두 번이나 받았지만 여전히 좋은 해결책을 찾지 못했습니다.
이것은 양식의 __init__
메서드를 재정의 할 때 안전한 디버깅의 예입니다.
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
# Disable form validation for debugging purposes unless the
# object is fully initialized. Set breakpoints BELOW this line.
del self._errors
# Write some additional initializations here, debug safely.
...
# Initialization is finished. Enable form validation.
self._errors = None
그런 다음 같은 방법으로 장고 코드를 패치 기본 폼 클래스를 디버깅 할 경우.
디버깅 후 추가 코드를 남기거나 제거 할 수 있습니다. 큰 차이는 아닙니다. 그러나 앞으로 필요할 경우를 위해 떠나는 것이 낫습니다.
그래서 실제로 무엇이 진행되고 있습니까?
(장고 프로젝트 사이트에 버그 보고서는 : https://code.djangoproject.com/ticket/24710)
문제가 (정말 @property
장식이있는 방법이다) 장고의 BaseForm.errors
속성 게터 너무 많이한다는 것을 보인다. full_clean()
메서드를 호출하여 _errors
속성 값을 변경하므로 errors
게터가 반복 호출에서 동일한 작업을 수행하지 않습니다.
class BaseForm(object):
@property
def errors(self):
if self._errors is None:
self.full_clean()
return self._errors
def full_clean(self):
self._errors = ErrorDict()
...
물론 PyCharm 디버거 특성은 단지 속성 있다고 가정하고, 그들은 객체의 내부 상태에 중요한 변경을하지 않습니다. 따라서 __ini__
메소드를 디버깅 할 때 디버거는 errors
게터를 호출하여 "변수"창에 값을 표시합니다. 그리고 이것은 정상적인 실행 흐름을 파괴합니다.
한 가지 제안 중단을 방지 단계별 실행 형태의 __init__
방법의 내부 일 수있다
는 (만약 그러한 경우가 아닌 특성 get_error()
같은 방법을 정의해야하는 이유이다). 그러나 실제로 디버깅해야한다면 단계별 실행 중에 _errors
속성이 존재하지 않도록 코드를 수정하십시오. 이렇게하면 full_clean
메소드 호출이 금지됩니다. PyCharm 디버거는 errors
속성에 액세스하려고 할 때마다 오류를 수신합니다.
참고 : 실행이 중지 될 때 errors
속성에도 __init__
방법 이외의 어떠한 단계에서 평가 될 수있다. 모든 필드가 이미 완전히 초기화 된 경우 결과에 영향을주지 않을 것입니다 (__init__
메소드에서만 수행해야 함). 그러나 is_valid
메서드 호출에 도달하기 전에 양식의 유효성이 확인되므로 양식 유효성 검사 프로세스를 디버그 할 수 없습니다. 이 경우 full_clean
메서드 내부에 중단 점을 설정하고 양식 인스턴스화 지점과이 중단 점 사이에서 중단하지 마십시오.
코드가 없으면 아무도 도움을 줄 수 없습니다. – Jingo
일부 코드를 추가했습니다 –
양식에'enctype = "multipart/form-data"'가 있습니까? –