취미삼아 배우는 프로그래밍

토이프로젝트) 생산관리 시스템 - 폼 작성 본문

코드 자가리뷰(장고)

토이프로젝트) 생산관리 시스템 - 폼 작성

Nadure 2020. 3. 12. 23:12

이번번엔 폼을 작성하려 한다.

 

장고는 MTV 패턴답게

모델에 따라서 폼 내용을 변경시켜주는 작성 모듈이 있다.

 

그래서 이걸 사용하면

대충 Form.py만 작성해주어도 모델이 맞추어 이렇게 폼 양식을 만들어준다.

모델이 추가되면 폼도 자동으로 추가되고 그런다.

 

이게 좋은 점도 있지만 단점도 많다

  1. 차라리 그냥 타이핑으로 Form을 작성하는게 나을 때가 있다.
  2. attrs, widgets을 할당해주는게 너무 귀찮고 번거롭다.
  3. 장고는 Bootstrap 기준으로 작성돼, 조금 커스텀이 필요할 때가 있다.
  4. 레이아웃 짜는게 좀 귀찮을 수 있다.

 

나의 경우는 지금 Materialized css 를 기반으로 작성하고 있기 때문에,

 <input type="checkbox" id="vehicle1" name="vehicle1" value="Bike">
<label for="vehicle1"> I have a bike</label><br>

<input type="checkbox" id="vehicle2" name="vehicle2" value="Car">
<label for="vehicle2"> I have a car</label><br>

<input type="checkbox" id="vehicle3" name="vehicle3" value="Boat">
<label for="vehicle3"> I have a boat</label><br> 

W3School내 소개된 기본적인 체크박스를 나타내는 구문과

<label>
  <input type="checkbox" checked="checked" />
  <span>Yellow</span>
</label>

Materialized내에 소개된 체크박스를 나타내 주는 구문이 차이가 있다.

그래서

이처럼 숨겨져 있는걸로 보여지게 된다.

이걸 해결하기 위해선, 직접 체크박스를 폼에 넣어서 작성해 주는 방법도 있겠지만,

간단히 커스텀을 해주어도 됐다.

 

커스텀 관련 글 :

https://ssungkang.tistory.com/entry/Django-widget-1-widget%EC%9D%98-%EC%9B%90%EB%A6%AC%EC%99%80-widget-%EB%A7%8C%EB%93%A4%EC%96%B4%EB%B3%B4%EA%B8%B0-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EA%B8%80%EC%9E%90%EC%88%98-%ED%91%9C%EC%8B%9C-widget

 

[Django] widget (1) widget의 원리와 widget 만들어보기 - 실시간 글자수 표시 widget

input 태그는 type 속성에 따라 여러 모습을 보여줍니다. text 일 때는 글을 입력할 수 있도록, date 일 때는 날짜를 지정할 수 있도록, password 일 때는 비밀번호를 입력할 수 있도록 하는 등 다양한 type이 있..

ssungkang.tistory.com

구세주느님..

 

 

체크박스위젯을 컨트롤을 누르고 보면,

아래처럼 템플릿이 다 할당돼 있다.

 

 

저쪽 경로를 타고 들어가서 보면

결국 Input.html을 인클루드 시키고 있는데,

 

이걸 입맛에 맞게 바꾸면 된다.

template html

<label>
<input type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %} value="{{ widget.value|stringformat:'s' }}"{% endif %}{% include "django/forms/widgets/attrs.html" %}>
<span></span>
</label>
<br>

 

CheckboxInput을 상속받아 템플릿 이름만 바꿔준다

class materialized_check_box(CheckboxInput):
    template_name = 'wall/components/materialized_checkbox.html'

 

이 템플릿 이름만 바꿔준걸 위젯으로 등록시킨다..

class Meta:
		....
        ....
        widgets = {
            'addings_manufacturing':materialized_check_box,
        }

 

 

결국엔 이 체크박스 버튼하나 만들고 오늘 하루가 끝나버렸다. 젠장 그냥넣을걸. 이게뭐라고

 

Comments