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