Django – modelform 사용자 필드 추가 – 필드 순서 변경 방법
그냥 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
- update_firmware_version 는 model 에 정의하지 않는 필드이다.
- 여기에 다른 테이블의 속성 값을 텍스트로 보여주고 싶어서 추가한 코드이다.
- 장고 빌트인 필드는 여기 링크를 참고하세요 – https://docs.djangoproject.com/en/4.1/ref/forms/fields/#built-in-field-classes
필드 순서는 class Meta: 부분에 fields 에 적힌 순서대로 보여주니까 사용자 정의 필드도 여기에 이름을 추가하면 된다. 간단