Django Form 수기

9852 단어 djangoform
렌더링 Form
  • 수동 렌더링 필드: {{{{form.name of field}
  • 이 필드의 input 탭 렌더링
  • 한 필드의 오류 알림 정보 렌더링 {{{{{form.name of field.errors}}
  • 어떤 필드의 label의 id {{{{{form.name of field.id for label}}
  • 어떤 필드의 label 이름을 얻었습니다. {{{{{form.name of field.label}}
  • 폼 클래스를 만드는 데 유용한 요약
  • 하나의Form류는 forms.Formforms.ModelForm를 계승할 수 있다. 전자는 조회표를 만들고 후자는 조회와 수정을 할 수 있는 표
  • 를 만든다.
  • Form 클래스의 메타클래스:
  • 원류의 모델 속성은 이 폼과 관련된 모델을 제어하는 데 사용됩니다
  • fields는 관련 모델에서 어떤 속성을 표로 꺼낼지 제어한다
  • widgets 속성은 form의 속성에 사용되는widget을 제어합니다. 이것은 하나의 속성을 단독으로 쓸 때 설정한widget 속성과 같습니다. 두 곳의 속성 명칭을 주의하고 마지막 s
  • 를 주의하십시오.
  • 우리는 폼을 다시 쓸 수 있는 init 방법으로 초기화된 동작을 추가할 수 있다
  • class YsryYdMainForm(forms.ModelForm):
        class Meta:
            model = YdMain
            fields = [
                'yd_id',
                # 'project',
                # 'method_id',
                'question_amount',
                'yd_commit_case',
                'yd_commit_manid',
                'yd_commit_date',
                'inspect_com',
                'yd_made_date',
            ]
            #              widget   ,                   widgets,       widget
            widgets = {'yd_commit_case': forms.Textarea()}
    
        def __init__(self, *args, **kwargs):
            super(YsryYdMainForm, self).__init__(*args, **kwargs)
            for field_name in self.fields:
                field = self.fields.get(field_name)
                if type(field) == forms.ModelChoiceField:  #   type            
                    field.widget.attrs.update({
                        'class':
                        'form-control selectpicker',
                        'data-live-search':
                        'true',
                    })
                elif type(field) == forms.ModelMultipleChoiceField:
                    field.widget.attrs.update({
                        'class': 'form-control m2mselect',
                    })
                elif type(field) == forms.DateField:
                    field.widget.attrs.update({
                        'class': 'form-control',
                        'readonly': '',
                    })
                else:
                    field.widget.attrs.update({'class': 'form-control'})
    
  • 표의 일부 필드는 시스템이 자동으로 값을 채웁니다. 우리는 자동으로 값을 채워야 하는 필드가 페이지에 나타나지 않지만 form류의 필드에 있어야 합니다. 그렇지 않으면 form류의 대상에 속성을 추가하여 저장할 때 오류가 발생합니다.

  • views에서 동적 제어 폼의 하단 선택 컨트롤 내용
  • request에 사용하기 때문에views에서만 제어할 수 있습니다. 그렇지 않으면forms에서 직접 제어할 수 있습니다
  •  #                ,                        
            ydform=YdMainForm()
            ydform.fields.get(
                'project').widget.choices.queryset = Project.objects.filter(
                    people=request.user.people.people_id)
    
    

    표류의 기입 사용 총결
  • 단독 입고 작업 중form표의 isvalid 검증은 form 클래스에 포함된 폼 필드만 검증하고 form 클래스에 포함되지 않은 필드는 모델에 필수 항목이 있어도 form 클래스의 검증은 통과할 수 있으며 강제 입고할 수 있습니다.
  • 즉form류의 검증이 통과되면form류의save가 집행되고 강제 집행된다는 것이다.
  • form클래스의 일부 필드의 값만 바꾸면 form클래스 정의meta는form클래스 정의가 아닌 필드를 가리키며 더 이상 작성할 때 영향을 받지 않습니다.
  • form 클래스 필드의 자연 순환 순서는 모델 클래스의 속성 배치 순서와 같다
  • 만약에 이런 장면이 있다면:form클래스를 사용하여 폼을 만들고 폼의 입력 내용을 저장해야 한다. 이때 몇 개의 필드를 수동으로 작성하지 못하게 하고 백엔드에서 자동으로 작성해야 할 때 이 필드를 프론트에 표시하지 않고 백엔드에서 폼에 Request를 전송할 수 있다.백그라운드 값이 필요한 값을 추가하는 POST의 복제본입니다.

  • Form 및 ModelForm을 사용하여 데이터를 저장하는 방법
  • 간단히 말하면 Form 클래스 폼을 사용하여 데이터 제출을 실현하고 데이터를 저장하려면 Form 폼을 이용해야 하는 isvalid 방법으로 양식 컨텐트를 검증한 후 clean데이터는 폼의 값을 가져옵니다. 마지막으로 모델로 수동으로 새로운 대상을 만들고 데이터베이스에 저장합니다.
  • ModelForm로 데이터를 저장하면 ModelForm의 isvalid 폼 검사가 통과되면 ModelForm의save 방법을 사용하여 데이터에 대한 저장을 입고할 수 있습니다.
  • 좋은 웹페이지 즐겨찾기