Choice
- 모델의 속성에 원하는 값들중 하나의 값을 넣고싶은 경우 속성에 Choice를 추가해주면 된다.
- Choice의 타입은 (실제 저장될 값, 사용자에게 표시할 값) 형식으로 들어간다.
- 사용자에게 표시할 값은 추후 템플릿에서 사용된다.
모델에 Choice 설정
- 게시판 모델에 Choice 설정 (자유게시판, 파이썬 게시판, 자바 게시판중 하나)
CHOICES = (
(0, '자유'),
(1, '파이썬'),
(2, '자바'),
)
posttype = models.IntegerField(default=0, choices=CHOICES)
폼에 모델 속성 추가
class QuestionForm(forms.ModelForm):
class Meta:
model = Question
fields = ['posttype', 'subject', 'content', 'image']
labels = {
'posttype': '게시판',
'subject': '제목',
'content': '내용',
'image': '이미지',
}
템플릿에 게시판 타입 Select 추가
<div class="form-group">
<label for="posttype">게시판</label>
<select class="form-select" name="posttype" id="id_posttype">
<!-- choice에서 (실제값, 유저에게 보여질 내용) 지정해 주었으므로, -->
{% for v, k in form.fields.posttype.choices %}
<option value="{{ v }}" {% if form.fields.posttype.value == v %} selected {% endif %}>{{ k }}</option>
{% endfor %}
</select>
</div>
- form.fields.posttype.choices
- 가져오면 위에서 지정한 (실제값, 유저에게 보여질 내용) 리스트가 넘어옴
- select의 option을 설정할 때 사용
- select의 name과 id 속성을 맞추어서 잘 설정해 준다.
- Bootstrap을 사용하였기 때문에 위와 같은 과정이 필요함.
- 그냥 쓰려면 {{ form.posttype }} 써주면 된다.