select, option 태그관련 질문드립니다.(pybo게시판 카테고리만들기)
안녕하십니까? 먼저 정말 알차고 유용한 책을 써주신 박응용님께 감사의 말씀드립니다.
파이보 추가기능을 위해서 제스스로? 카테고리를 만들어보려고 하고있습니다.
현재 페이지의 게시글 카테고리의 경우, 각 카테고리의 질문리스트로 이동해서 그곳에서 질문등록을 하면서 category_name을 통해 질문글의 category를 연결시키는 방식인것같은데, 저는 일반 다른사이트에서 글작성할때와 같이 글작성 form에 카테고리를 select, option태그를 통해서 설정을 하면 어떨까 생각해보았습니다.
models.py 파일
from django.db import models
from django.contrib.auth.models import User
class Category(models.Model):
title = models.CharField(max_length=200)
def __str__(self):
return self.title
class Question(models.Model):
category = models.ForeignKey(Category, on_delete=models.CASCADE, default='', null=True, blank=True)
author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='author_question') # on_delete~~ : 계정이 삭제되면 작성한 질문 모두 삭제
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
modify_date = models.DateTimeField(null=True, blank=True)
# null=True : modify_date칼럼에 null 허용, blank=True : form.is_valid()를 통한 입력 데이터 검사시 값이 없어도 valid 함
voter = models.ManyToManyField(User, related_name='voter_question') # 추천인 추가
def __str__(self):
return self.subject
# Create your models here.
question_form.html 파일
{% block content %}
<div class="container">
<h5 class="my-3 border-bottom pb-2">질문등록</h5>
<form method="post" class="post-form my-3">
{% csrf_token %}
<!-- 오류표시 Start -->
{% if form.errors %}
<div class="alert alert-danger" role="alert">
{% for field in form %}
{% if field.errors %}
<strong>{{ field.label }}</strong>
{{ field.errors }}
{% endif %}
{% endfor %}
</div>
{% endif %}
<!-- 오류표시 End -->
<div class="form-group">
<label>카테고리</label>
<select name="{{ form.category.value }}">
<option value="free">자유게시판</option>
<option value="qna">질의응답</option>
<option value="notice">공지사항</option>
</select>
</div>
<div class="form-group">
<label for="subject">제목</label>
<input type="text" class="form-control" name="subject" id="subject"
value="{{ form.subject.value|default_if_none:'' }}">
</div>
<div class="form-group">
<label for="content">내용</label>
<textarea class="form-control" name="content"
id="content" rows="10">{{ form.content.value|default_if_none:'' }}</textarea>
</div>
<button type="submit" class="btn btn-primary">저장하기</button>
</form>
</div>
{% endblock %}
forms.py 파일
class QuestionForm(forms.ModelForm): # ModelForm을 사용해서 연결된 모델의 데이터를 저장할 수 있는 폼
class Meta: # 모델폼은 이너클래스인 Meta클래스가 반드시 필요.
model = Question
fields = ['subject', 'content', 'category'] # 모델폼은 사용할 모델과 모델의 속성을 적는다.
widgets = {
'subject': forms.TextInput(attrs={'class': 'form-control'}),
'content': forms.Textarea(attrs={'class': 'form-control', 'row': 10}),
}
labels = {
'category' : '카테고리',
'subject' : '제목',
'content' : '내용',
}
위와같이 forms.py에서 Question폼에 category를 적어주고,
select 태그에 name = {{ form.category.value }} 처럼 전달해서 value를 카테고리로 전달하려고했는데, 막상 게시글작성에서 카테고리를 자유게시판(free)로 설정하고 질문작성을 눌렀을때, proxy로 캡처해보면 category 파라미터자체가 POST방식으로 전달이 되지않았습니다.
위와같은상황에서 forms.py 로 category 값을 전달할때 어떤식으로 하면 좋을지 조언해주신다면 감사하겠습니다.
qew753951 님 542
2022년 4월 10일 11:11 오후
1개의 답변이 있습니다. 1 / 1 Page
<select name="{{ form.category.value }}"> 을 <select name="category"> 로 해야 category 값을 읽을수 있습니다.
박응용 님
2022년 4월 10일 11:21 오후