복붙노트

[PYTHON] 장고 양식 '초기'와 '바운드 데이터'의 차이점은 무엇입니까?

PYTHON

장고 양식 '초기'와 '바운드 데이터'의 차이점은 무엇입니까?

주어진 예를 들면 :

class MyForm(forms.Form): 
    name = forms.CharField()

다음 두 코드 조각의 차이점을 파악하려고합니다.

"바운드 데이터"스타일 :

my_form = MyForm({'name': request.user.first_name})

"초기 데이터"스타일 :

my_form = MyForm(initial={'name': request.user.first_name})

설명서는 "초기 값은 동적 초기 값입니다"라고 제안하는 것 같지만 생성자에 "바인딩 된 데이터"를 전달할 수 있다는 것은 똑같은 작업을 수행합니다. 과거에는 동적 데이터 값에 초기 데이터를 사용했지만 좀 더 직관적 인 "바운드 데이터"스타일을 사용하고 싶지만이 두 스타일 간의 실제 차이점에 대한 정보를 원합니다.

해결법

  1. ==============================

    1.여기에 바인딩 및 언 바운드 형태에 대한 장고 문서의 핵심 부분이 있습니다.

    여기에 바인딩 및 언 바운드 형태에 대한 장고 문서의 핵심 부분이 있습니다.

    폼이 "바운드 데이터"스타일에서 유효하기 때문에 여러분이 준 예제 폼의 차이를 실제로 볼 수 없습니다. 나이 필드를 추가하여 양식을 확장 해 보겠습니다. 그러면 차이가 더 분명해질 것입니다.

    class MyForm(forms.Form):
        name = forms.CharField()
        age = forms.IntegerField()
    
    my_form = MyForm({'name': request.user.first_name})
    

    나이가 지정되지 않았으므로이 양식은 유효하지 않습니다. 템플릿에서 폼을 렌더링하면 age 필드에 대한 유효성 검사 오류가 표시됩니다.

    my_form = MyForm(initial={'name':request.user.first_name})
    

    이 양식은 언 바운드입니다. 유효성 검사가 트리거되지 않으므로 템플릿을 렌더링 할 때 오류가 표시되지 않습니다.

  2. ==============================

    2.아니, 그 차이점은 무엇입니까 (그리고 나는 그 문서에서 당신이 그 인상을 어디서 얻었는지 알고 싶습니다). 차이점은 유효성 검사가 수행되는지 여부입니다.

    아니, 그 차이점은 무엇입니까 (그리고 나는 그 문서에서 당신이 그 인상을 어디서 얻었는지 알고 싶습니다). 차이점은 유효성 검사가 수행되는지 여부입니다.

    초기 데이터는 유효성 검사를 트리거하지 않습니다. 예를 들어, 특정 필드를 미리 채우고 다른 필드는 비워 둘 수 있습니다 (필수 항목 임에도 불구하고). 바운드 데이터를 사용했다면 해당 양식을 처음 볼 때조차도 빈 필드의 오류가 발생하게되어 사용자에게는 성가 시게됩니다.

    바운드 데이터는 물론 유효성 검사를 트리거합니다. 또한 모델 폼을 사용하는 경우 관련 인스턴스는 초기 데이터가 아닌 바운드 데이터로만 업데이트됩니다.

  3. ==============================

    3.또 다른 차이점은 데이터는 위젯이 구문 분석 할 수있는 반면 초기는 필드 당 것으로 예상한다는 것입니다. 예를 들어 MultiWidgets을 사용하십시오. 이 경우 데이터에는 다음과 같은 내용이 포함되어야합니다.

    또 다른 차이점은 데이터는 위젯이 구문 분석 할 수있는 반면 초기는 필드 당 것으로 예상한다는 것입니다. 예를 들어 MultiWidgets을 사용하십시오. 이 경우 데이터에는 다음과 같은 내용이 포함되어야합니다.

    {'myfield_0': 'data for subwidget 0', 
     'myfield_1': 'data for subwidget 1'}
    

    initial은 다음과 같은 것을 기대합니다.

    {'myfield': 'data for subwidget 0,data for subwidget 1'}
    
  4. from https://stackoverflow.com/questions/7920128/difference-between-django-form-initial-and-bound-data by cc-by-sa and MIT license