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> |