django 011 | Form
Form 실습
=> form을 사용하면 저번에 사진 파일 칸 추가하느라 views, urls, 다 바꿨던 귀찮은 경험 하지 않을 수 있다
=> 더불어 유효성 검사도 할 수 있음
- blog 앱에 forms.py 파일을 만들어준다
from django import forms
from .models import blog
class blogform(forms.ModelForm):
class Meta : #내가 아래에 있는 필드들 적절히 연결해주겟다~
model=blog
fields=['title', 'writer', 'body', 'image']
#필드에서 내가 원하는 아이들만 pick해서 blogForm으로 해주겟당~
- views.py에 blogform import 해주기
from .forms import blogform
- views.py 수정 계속 & new.html 수정
- 기존 new 함수는 new.html 가져오는 애였다면 이제는 form도 넘겨주기~
def new(request):
form=blogform()
return render(request, 'new.html',{form : form})
- new.html 수정
- 기존 new.html
<form action ="{% url 'create' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
제목 : <input type="text" name="title"><br><br>
작성자 : <input type="text" name="writer"><Br><br>
본문 : <textarea name="body" id="" cols="30" rows="10"></textarea><br>
사진 : <input type="file" name="image">
<br><button type="submit">저장하기</button>
</form>
- 수정 후 html
<form action ="{% url 'create' %}" method="post" enctype="multipart/form-data">
{% csrf_token %}
{{form}}
{% endblock %}
</form>
이렇게 하고 new.html 서버 돌려보면
- 이를 p 태그에 감싸서 보내준다면
{{form.as_p}}
가지런하게 나온다
(+) table로 감싸기도 가능 ㅇㅇ
<table>
{{form.as_table}}
</table>
- 아까 만든 복잡한 create 내의 blogform도 고쳐주기 가능
- 기존 create form
def create(request): #new.html에서 오는 정보를 받아줘야 함
new_blog=blog()
new_blog.title=request.POST['title']
new_blog.writer=request.POST['writer']
new_blog.body=request.POST['body']
new_blog.pub_date=timezone.now()
new_blog.image=request.FILES['image']
new_blog.save()
return redirect('detail', new_blog.id)
- 수정
def create(request): #new.html에서 오는 정보를 받아줘야 함
form=blogform(request.POST, request.FILES)
if form.is_valid: #유효성 검사
new_blog=form.save(commit=False)
#blogform엔 pub_date가 들어가지 않는데그냥 냅둔다면 빈칸으로 쌓일거기 때문에
#commit false로 임시저장 시캬노코 pubdate 추가해야함
new_blog.pubdate=timezone.now()
new_blog.save() #pub도 추가했으니 최종 저장
return redirect('detail', new_blog.id)
return redirect('home') #form 유효안하면 home으로
Author And Source
이 문제에 관하여(django 011 | Form), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@myway00/django-011-Form저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)