모델 형식에 맞는 입력공간 만들기
하나하나하 Form 태그 만드는 것의 한계
그래서 장고 내부의 forms.py를 활용하기!
Forms.py
1) 모델 기반 입력공간 만들기
from django import forms.ModelForm
2) 임의의 입력공간 만들기
from django import forms.Form
# model(Form.py)
from django import forms.Form
class myForm(forms.ModelForm):
class Meta:
어떤 모델을 기반으로 한 입력공간인가
그 모델 중 어떤 항목을 입력받을 것인가
img = forms.ImageField
text = forms.TextField(or forms.CharField)
tims = forms.DateTimeField
project/blog/forms.py 만들기
1 2 3 4 5 6 7 8 | from django import forms from .models import Blog # 만약 모델 기반이 아니라면 forms.Form class BlogPost(forms.ModelForm): class Meta: model = Blog fields = ['title' , 'body'] | cs |
다양한 Field가 있지만, 모델을 기반으로 한 입력공간 만들기에 집중!
Form.py로 파일을 분할해서 관리할 수 있도록 한다!
# url 추가해주기
1 2 | # project/blog/urls.py path('newblog', views.blogpost, name="newblog"), | cs |
# views.py
from .form import myForm
def create(request):
수행역할
1. 처음 new.html 들어갔을 떄 빈 입력공간 띄우기
-> Get
2. 이용자가 뭘 입력하면 그입력값들 처리하기
-> Post
.is_valid(적절한 값 확인)
form.save(commit=False)
# 일단 저장하지 말고 form 객체말고 model 객체에 접근
# model 객체 안의 date 변수에 접근, 값 수정
# model 객체 저장
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # views.py from .forms import BlogPost ... def blogpost(request): # 입력된 내용 처리 -> POST if request.method == 'POST': form = BlogPost(request.POST) if form.is_valid(): # 잘입력된지 체크 post = form.save(commit=False) post.pub_date = timezone.now() post.save() # 저장하기 return redirect('home') # 홈으로 # 빈 페이지 띄워주는 기능 -> GET else : form = BlogPost() return render(request, 'new.html', {'form':form}) | cs |
# template
{{form}} 을 통해 출력
Form안의 내용을 어떤 태그로 감싼 채 출력할지 미리 결정!
{{form.as_table}} # 테이블
{{form.as_p}} # paragraph
{{form.as_ul}} # 리스트
1 2 3 4 5 6 7 8 9 10 11 | # project/blog/templates/new.html <div class = "container"> <form method ="POST"> {% csrf_token %} <table> {{form.as_table}} </table> <br> <input class="btn btn dark" type="submit" value="제출하기"> </form> </div> | cs |
# 참고사항
모델기반이 아닌 임의의 입력공간 만들기
1 2 3 4 5 6 7 8 9 10 | # forms.py from django import forms from .models import Blog class BlogPost(forms.Form): email = forms.EmailField() files = forms.FileField() url = forms.URLField() words = forms.CharField(max_length=200) max_number = forms.choiceField(choices=[('1','one'),('2','two'),('3','three')]) | cs |
'Web Programming > Django' 카테고리의 다른 글
댓글 기능 추가하기(모델 관계) (0) | 2019.02.20 |
---|---|
Django 장고 텍스트에디터 사용하기(CKeditor) (4) | 2019.02.19 |
Blog 프로젝트 정리 (0) | 2019.02.12 |
페이지 나누기(Pagination) (0) | 2019.02.10 |
로그인 & 회원가입 (0) | 2019.02.09 |