HTML – 버튼에 또 중복 타입 type=”button” 선언
별로 생각 안하고 썼는데,
기본은 type=”submit” 으로 잡혀있어서, 왠만하면 일반 버튼은 type=”button” 을 써 주는게 좋을 듯 하다.
약간 중복되는 느낌은 있긴 하지만 그래도 머, 아무곳이나 눌러서 Submit 이 되면 낭패이니깐..
별로 생각 안하고 썼는데,
기본은 type=”submit” 으로 잡혀있어서, 왠만하면 일반 버튼은 type=”button” 을 써 주는게 좋을 듯 하다.
약간 중복되는 느낌은 있긴 하지만 그래도 머, 아무곳이나 눌러서 Submit 이 되면 낭패이니깐..
가끔 초기화 할때, 내가 원하는 변수 값을 넘기고 싶을때 kwargs 에 넣어줘서 넘겨줄 수 있다.
코드를 일단 보자
class ProductUpdateView(BSModalUpdateView):
model = Product
template_name = "_modal_update.html"
form_class = ProductUpdateForm
success_message = "변경완료"
# success_url = reverse_lazy('orderitem_list')
def get_success_url(self):
return self.request.META["HTTP_REFERER"]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
print("===여기 들어옴 ProductUpdateView ===", args, kwargs)
def get_form_kwargs(self):
kwargs = super().get_form_kwargs()
kwargs["request"] = self.request
return kwargs
일단, get_form_kwargs(self) 함수가 있다는 사실이 중요하다.
여기에서 기본 값들을 받고, 사용자 변수를 추가하고 리턴해주면 사용자 값이 추가된 kwargs 를 넘길 수 있다.
사용되는 부부은 이런 곳이다.
class ProductUpdateForm(BSModalModelForm):
title = ""
class Meta:
model = Product
fields = ["company", "name"]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# print("=== ProductUpdateForm ===", args, kwargs, kwargs["request"])
__init__() 함수가 불려질때 넘어오게 되는 kwargs 에 내가 추가한 변수가 떡하니 들어 있다.
유용하게 활용하자.
https://ggodong.tistory.com/209 – Get, Post 요청을 모두 알아서 처리하는 FormView !
https://stackoverflow.com/questions/18605008/curious-about-get-form-kwargs-in-formview
항상 하는데 항상 헷갈려
Fields 와 Widget 은 궁합이 있는데 쌍으로 움직여야 제대로 나온다.
아래 코드로 나온 모양들이다. 여러가지 위젯이 쓰이고 있다.
class FirmwareUpdateForm(BSModalModelForm):
is_fileinclue = "enctype=multipart/form-data"
title = ""
class Meta:
model = Firmware
fields = ["company", "desc", "dtype", "content", "filename", "version", "publish", "channelfw_type", "date_release", "products"]
labels = {
"company": _("*회사명"),
"desc": _("설명"),
"dtype": _("타입"),
"filename": _("파일명"),
"content": _("파일"),
}
widgets = {
"company": forms.Select(attrs={"class": "form-select"}),
"desc": forms.TextInput(attrs={"class": "form-control", "placeholder": "설명"}),
"dtype": forms.Select(attrs={"class": "form-select", "placeholder": "타입"}),
"filename": forms.TextInput(attrs={"class": "form-control", "placeholder": "읽기전용-자동입력됩니다", "readonly": "readonly"}),
# "content": forms.FileInput(attrs={"class": "form-control", "placeholder": "첨부파일"}),
"version": forms.TextInput(attrs={"class": "form-control"}),
"publish": forms.CheckboxInput(attrs={"class": "form-check"}),
"channelfw_type": forms.Select(attrs={"class": "form-select"}),
"date_release": forms.DateTimeInput(attrs={"type": "datetime-local", "class": "form-control"}),
"products": forms.SelectMultiple(attrs={"class": "form-control"}),
}
특히, 날짜 시간 입력 받는 부분을 참고해두고 나중에 활용하자.
type을 datetime-local 이런게 있는줄 몰랐네
보통 date 는 많이 썼는데,
“date_release”: forms.DateTimeInput(attrs={“type”: “datetime-local”, “class”: “form-control”})
참고한 사이트는 여기 https://www.letscodemore.com/blog/how-to-add-date-input-widget-in-django-forms/
실제 자세한 내용은 당연하게도 공식 사이트로
https://docs.djangoproject.com/en/4.1/ref/forms/widgets/
이름만 알아도 머 상상은 쉽게 되니깐
Django forms fields 와 헷갈리면 안된다. 필드의 속성을 정의하는 fields 도 맞춰서 잘 써야 한다.
https://docs.djangoproject.com/en/4.1/ref/forms/fields/
맵핑 테이블을 아래와 같이 정리해둔 곳이 있네, 이 테이블을 보는게 편하겠다.
https://www.letscodemore.com/blog/how-to-add-date-input-widget-in-django-forms/