Model 선언할 때와 비슷한 자태를 갖고있다.
form안에는 입력받고자 하는 데이터의 세부사항을 입력해주면 됨
from django import forms
class ArticleForm(forms.Form):
title = forms.CharField(max_length=10)
content = forms.CharField(widget=forms.Textarea)
HTML엔 이렇게
as_p는 p로 감싸져서 나오게 해달라는 뜻. div도 가능함.
더 많은 방법들

views.py에서 이렇게 해줘야 HTML에서 변수로 사용할 수 있다.

웹 페이지에서 Form Input 요소가 어떻게 렌더링 되어서 보여질지 정의됨
더 많은 위젯

Model을 참고해 Form을 알아서 만들도록 시킨다.
Model Form
from django import forms
from articles.models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
fields = "__all__"
# exclude = ["title"]
new는 GET, create는 POST로 들어오니, 조건문(if else)를 잘 활용해보자
그리고
new.html을 create.html 로 변경# views.py
def create(request):
if request.method == "POST":
form = ArticleForm(request.POST)
if form.is_valid():
article = form.save()
return redirect("article_detail", article.id)
else:
form = ArticleForm()
context = {"form": form}
return render(request, "create.html", context)
edit는 GET, update는 POST로 들어오니, 조건문(if else)를 잘 활용해보자
그리고
edit.html을 update.html로 변경article_detail.html 에서 글 수정 버튼 변경edit이었던 부분을 update 로 수정# views.py
def update(request, pk):
article = Article.objects.get(pk=pk)
if request.method == "POST":
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
article = form.save()
return redirect("article_detail", article.pk)
else:
form = ArticleForm(instance=article)
context = {
"form": form,
"article": article,
}
return render(request, "update.html", context)
→ Model Form은 instance라는 속성에 값이 있으면 해당 instance를 수정하고
값이 없으면 새로 생성하는 로직을 수행함