Django - ModelForm __init__() 함수 예제

Django - ModelForm __init__() 함수 예제
Photo by Austin Distel / Unsplash

그냥 예제 ModelForm init() 함수에서 수행할 것을 몇 가지 저장해 둔다.

  • 원하는 필드만 보여주기 fields
  • 필요 없는 필드 제거해서 보여주기 exclude
  • labels 를 이용한 원하는 라벨 표기
  • widgets 으로 원하는 form 객체 가져다 놓기
  • 필드에 필터링 해서 데이터를 올려줄 수 있는 queryset
  • empty label 보여주지 않게 하기

class ProductProfileForm(forms.ModelForm):
    class Meta:
        model = ProductProfile
        fields = ["company", "name", "product", "fwver1"]
        exclude = ["updated_at", "created_at"]
        labels = {
            "company": _("*회사"),
            "name": _("프로파일명"),
            "product": _("상품명"),
            "fwver1": _("펌웨어"),
        }
        widgets = {
            "company": forms.Select(attrs={"class": "form-select"}),
            "name": forms.TextInput(attrs={"class": "form-control flex-fill", "placeholder": "프로파일명 (중복허용안함)"}),
            "product": forms.Select(attrs={"class": "form-select flex-fill", "required": True}),
            "fwver1": forms.Select(attrs={"class": "form-select flex-fill", "required": False}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['fwver1'].queryset = Firmware.objects.filter(dtype='F')
        # empty field label --------- 없애기
        self.fields['product'].empty_label = None

끝.