Django - modelform 사용자 필드 추가 - 필드 순서 변경 방법

Django - modelform 사용자 필드 추가 - 필드 순서 변경 방법
Photo by GSJJ / Unsplash

그냥 model 에 사용된 필드만 쓰면 별 고민이 없는데, 꼭 쓰다보면 사용자 정의 필드를 넣어줘야 할 때가 있다. 이때마다 생각이 안나서 일단 정리

필드를 그냥 변수 정의하듯이 정의해서 사용하면 된다.

class ShippingProductUpdateForm(BSModalModelForm):
    title = ""
    update_firmware_version = forms.CharField(label=_("*업데이트버전"), widget=forms.TextInput(attrs={"readonly": True}))

    class Meta:
        model = ShippingProduct
        fields = ["product", "serial", "status", "version", "update_firmware_version", "date_shipping", "shipping_company"]
        labels = {
            "shipping_company": _("출고회사"),
            "product": _("*상품"),
            "serial": _("*시리얼"),
            "status": _("*상태"),
            "date_shipping": _("*출고일"),
        }
        widgets = {
            "shipping_company": forms.Select(attrs={"class": ""}),
            "product": forms.Select(attrs={"class": "", "placeholder": "상품"}),
            "serial": forms.TextInput(attrs={"class": ""}),
            "version": forms.TextInput(attrs={"readonly": True}),
            "update_firmware": forms.TextInput(attrs={"readonly": True}),
            "status": forms.Select(attrs={"class": ""}),
            "date_shipping": forms.DateInput(attrs={"type": "date", "required": True}),
        }

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.title = "출고상품 수정"
        self.fields["update_firmware_version"].initial = self.instance.update_firmware.version

필드 순서는 class Meta: 부분에 fields 에 적힌 순서대로 보여주니까 사용자 정의 필드도 여기에 이름을 추가하면 된다. 간단

참고 사이트