흰 스타렉스에서 내가 내리지

modelForm 본문

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
        }

'Django' 카테고리의 다른 글

게시글 detail 페이지 구현  (0) 2022.06.08
DB에 담긴 데이터들을 html에 띄워보자  (0) 2022.06.07
django form 이용하기  (0) 2022.06.07
static  (0) 2022.06.06
앱 추가하고 url 매핑하기  (0) 2022.06.06