Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- pwa적용하기
- PWA
- SSAFY
- QuerySetAPI
- 14658
- sqld
- 싸피셜
- unionfind
- 셀프넘버
- Django
- 리액트
- 싸피
- VITE
- 알고리즘
- SSAFYcial
- Javascript
- queryset
- 플로이드워셜
- vitepwa
- git
- 백준
- SQL
- js
- 데코레이터
- 싸피10기
- react
- db
- TypeScript
- Python
- 머신러닝종류
Archives
- Today
- Total
Meme's IT
[Django] ModelForm 본문
# ModelForm이란? = Form + Model
Model과 연결된 Form을 자동으로 생성해주는 기능
Form과 ModelForm의 차이
- Form: 추가적인 내용을 입력 받을꺼다/ 사용자 입력 데이터를 DB에 저장하지 않음 (로그인)
- ModelForm: 정의한 필드를 입력받을꺼다 / 사용자 입력 데이터를 DB에 저장함 (게시글, 회원가입)
https://memezz.tistory.com/24을 ModelForm으로 바꿔보자
1. forms.py를 만든 후, ArticleForm을 생성해준다.
# articles/forms.py
from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = '__all__'
여기서 Meta는 뭐지..?
# Meta class
ModelForm의 정보를 작성하는 곳
- 'fields' 속성: 포함할 필드 지정
- 'exclude'속성: 제외할 필드 설정
class Meta:
model = Article
# 전체 출력
fields = '__all__'
# title만 출력
fields = ('title',)
# title만 제외
exclude = ('title',)
2. views.py에 ModelForm을 적용해준다.
def create(request):
form = ArticleForm(request.POST)
# 유효성 검사
if form.is_valid():
# 유효성 검사 통과라면
article = form.save()
return redirect('articles:detail', article.pk)
context = {
'form' : form,
}
return render(request, 'articles/new.html', context)
→ 이렇게 하면 input에 공백이 들어가는 등의 에러를 에러 메세지로 확인할 수 있다(유효성 검사)
더보기
is_valid()함수: 여러 유효성 검사를 실행하고, 데이터가 유효한지 여부를 Boolean으로 반환해줌
우리가 굳이 유효성 검사를 일일히 할 필요 없이 Django에서 알아서 해줌!
3. edit와 create도 바꿔준다.
# views.py
def edit(request, pk):
article = Article.objects.get(pk=pk)
form = ArticleForm(instance=article)
context = {
'article': article,
'form' : form,
}
return render(request, 'articles/edit.html', context)
def update(request, pk):
article = Article.objects.get(pk=pk)
form = ArticleForm(request.POST, instance=article)
if form.is_valid:
form.save()
return redirect('article:detail',article.pk)
context = {
'form' : form
}
return render(request,'article/edit.html',context)
<!-- articles/edit.html -->
<h1>Edit</h1>
<form action="{% url "articles:update" article.pk %}" method="POST">
{% csrf_token %}
{{form.as_p}}
<input type="submit">
</form>
- save() 함수: 데이터 베이스 객체를 만들고, 저장하는 함수
# save가 생성과 수정을 구분하는 방법
# CREATE일 때
form = ArticleForm(request.POST)
form.save()
# UPDATE일 때
form = ArticleForm(request.POST, instance=article) # 키워드인자 instance로 결정됨
form.save
'BackEnd > Django' 카테고리의 다른 글
[Django] Static Files & Media Files (0) | 2023.10.04 |
---|---|
[Django] view 함수 update (0) | 2023.10.04 |
[Django] Form (0) | 2023.09.27 |
[Django] HTTP request methods (0) | 2023.09.26 |
[Django] 게시판 만들기 - 수정 (0) | 2023.09.26 |