[Django] Model과 Form 1

즐겁고치열하게·2022년 11월 27일
0

Model과 Form

Model과 Form의 형태

Django에서 DB Entity를 나타내기 위해서 django.db의 Model이라는 모듈을,
View 계층(장고에서는 View, 일반적으로는 Controller 계층)에 데이터를 안정적으로 전송하기 위해 Form이라는 모듈 제공한다.

이는 django 프로젝트를 생성했을 때 생기는 models.py 와 forms.py에 기본적으로 포함되어있다.

임의로 게시글 Post 모델을 작성한다면

  • models.py
from djang.db import models


class Post(models.Model):
	BOARD_CHOICE = (
    	('free', '자유 게시판'),
        ('game', '게임 게시판')
	)
	title = models.CharField('이름', 
    						max_length=20)
    body = models.TextField('내용')
    category = models.CharField('게시판', 
    							max_length=20, 
                                choices=BOARD_CHOICE, 
                                default='free')
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_add=True)
    
  • forms.py
from django import forms
from .models import Post


class PostForm(forms.Form):
	title = forms.CharField(label='제목')
    body = forms.CharField(label='내용', widget=forms.Textarea)
    
class PostModelForm(forms.ModelForm):
	class Meta:
    	model = Post
        fields = ['title', 'body', 'cagetory']
        # 전부 입력받으려면 아래와 같이 사용
        # fields = '__all__'
	

Null과 Blank의 차이

기본적으로 null=False, blank=False 상태이다.

필드 옵션의 기본적인 설명

  1. null : 데이터베이스에 Null값이 들어가는 것을 허용한다.
  2. blank : Form(입력 양식)이 공백 상태로 받는 것을 허용.
    form.is_valid()와 관계되어있다.
    실제 데이터는 ''(공백)이 입력됨
class Person(models.Model):
  name = models.CharField(max_length=255)  # 필수
  bio = models.TextField(max_length=500, blank=True)  # 선택 (null=True를 넣지 말자)
  birth_date = models.DateField(null=True, blank=True)  # 선택 (여기서는 null=True를 넣을 수 있다.)

주의사항

  1. 문자열 필드에는 null=True를 사용하지 않는다.
    TextField나 CharField같은 문자열 필드에는 null=True를 넣으면 안된다. 만약 아래와 같은 옵션을 주게된다면 문자열 데이터가 없을 때 Null 상태와 공백상태 2가지로 표현하게 된다.
text = models.TextField(null=True, blank=True)
# null : 데이터가 없으면 Null 입력
# blank : 데이터가 없으면 공백('') 입력
  1. BooleanField에 null옵션을 사용하려면 NullBooleanField를 사용한다.

10. null=True 와 blank=True 의 차이가 무엇인가요?
TIL.57 null=True 와 blank=True 의 차이(Django)
(번역) Django Tips #8 Blank or Null?

profile
기술을 공부하는 기술자

0개의 댓글