Django
modelForm
주씨.
2022. 6. 7. 22:24
728x90
path 지정
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.home, name='home'),
path('new/', views.new, name='new'),
path('create/', views.create, name='create'),
path('formcreate/', views.formcreate, name='formcreate'),
path('modelformcreate/', views.modelformcreaete, name='modelformcreate'),
]
forms.py - 비교를 위해 BlogForm도 같이 업로드한다
from django import forms
from .models import Blog
class BlogForm(forms.Form):
# 내가 입력받고자 하는 값들
title = forms.CharField()
body = forms.CharField(widget=forms.Textarea)
class BlogModelForm(forms.ModelForm):
class Meta:
model = Blog
# fields = '__all__' # Model의 Blog 모델을 전부 입력받을 것이다
fields = ['title', 'body'] # 특정 필드만 입력받고 싶을 때
views.py - 비교를 위해 formcreate랑 같이 업로드한다
def formcreate(request):
if request.method == 'GET':
form = BlogForm()
elif request.method == 'POST':
form = BlogForm(request.POST)
if form.is_valid(): # 폼 데이터를 자동으로 유효성 검사를 해줌
post = Blog()
post.title = form.cleaned_data['title']
post.body = form.cleaned_data['body']
post.save()
return redirect('home')
return render(request, 'form_create.html', {'form': form})
def modelformcreate(request):
if request.method == 'GET':
form = BlogModelForm()
elif request.method == 'POST':
form = BlogModelForm(request.POST)
if form.is_valid(): # 폼 데이터를 자동으로 유효성 검사를 해줌
form.save()
return redirect('home')
return render(request, 'form_create.html', {'form': form})
form 비주얼적 요소 설정
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = '__all__'
def __init__(self, *args, **kwargs):
super(PostForm, self).__init__(*args, **kwargs)
self.fields['title'].widget.attrs = {
'class': 'form-control',
'placeholder': "글 제목을 입력해주세요",
'rows': 20
}
self.fields['body'].widget.attrs = {
'class': 'form-control',
'placeholder': "글 제목을 입력해주세요",
'rows': 20,
'cols' : 100
}
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ['comment']
def __init__(self, *args, **kwargs):
super(CommentForm, self).__init__(*args, **kwargs)
self.fields['comment'].widget.attrs = {
'class': 'form-control',
'placeholder': "댓글을 입력해주세요",
'rows': 10
}