52번째 줄:
52번째 줄:
== view 작성 ==
== view 작성 ==
−
board.views.py에 다음과 같은 함수를 추가한다.<syntaxhighlight lang="python">
+
+
board.views.py에 다음과 같은 함수를 추가한다.
+
+
일반적으로 페이지를 불러오는 것과 데이터를 저장하는 데 같은 링크를 사용한다.
+
+
페이지 요청방식에 따라 달리 작동하게 하면 되는데, POST요청이면 데이터를 저장.
+
+
(링크를 타고 오는 경우, GET 요청으로 들어온다.)
+
{| class="wikitable"
+
!일반적으로 코드를 짤 경우
+
!제네릭뷰(클래스형 뷰)를 쓰는 경우
+
|-
+
|<syntaxhighlight lang="python">
def create(request):
def create(request):
from django.shortcuts import redirect
from django.shortcuts import redirect
70번째 줄:
82번째 줄:
# 없으면 그냥 form 작성을 위한 객체를 넘긴다.
# 없으면 그냥 form 작성을 위한 객체를 넘긴다.
return render(request, 'board/create.html', context)
return render(request, 'board/create.html', context)
+
</syntaxhighlight>보통 기존입력값을 지우지 않고 보관하여 다시 보여주기 위해 작성페이지 view 와 데이터제출 view를 한 함수에 만든다.
+
+
글 작성view 뿐 아니라 수정view를 작성할 때에도 마찬가지이다.
+
|<syntaxhighlight lang="python">
+
from django.views import generic
+
from django.urls import reverse_lazy # 이건 뭐지;;?
+
+
class create(generic.CreateView):
+
model = Question
+
feilds = ['필드명', '필드명',...] # 작성할 필드명 지정
+
template_name_suffix='_create'
+
# 사용하는 탬플릿 명을 '모델명_create.html'로 바꾼다는 의미. 접미사만 바꾼다.
+
# 기본 탬플릿은 '모델명_form.html'로 나타난다.
+
+
def form_valid(self, form): # 폼에 이상이 없으면 실행.
+
temp = form.save(commit=False) # 임시 저장. 폼 외의 다른 내용을 조작하고 싶을 때 사용한다.
+
조작
+
temp.save() # 최종 저장
+
return super().form_valid(form)
+
+
def get_success_url(self): # 기존 함수를 덧쓴다. 작성 후에 해당 글을 보여주게끔.
+
return reverse('pool:detail', kwargs={'pk': self.object.question.pk})
</syntaxhighlight>
</syntaxhighlight>
−
+
|}
== template 작성 ==
== template 작성 ==
79번째 줄:
113번째 줄:
<form action="{% url 'board:create' %}" method="POST">
<form action="{% url 'board:create' %}" method="POST">
{% csrf_token %}
{% csrf_token %}
−
{{ form}}
+
{{ form }}
<input type="submit" value="제출">
<input type="submit" value="제출">
</form>
</form>