Django 모델 만들 때, null=True랑 blank=True 이거 헷갈리시는 분들 많으시죠? 저도 처음엔 완전 멘붕이었어요. 데이터베이스랑 Django 유효성 검사, 이 두 가지를 다 고려해야 한다는 게 쉽지 않았거든요. 그래서 오늘은 제가 직접 부딪히면서 깨달은 점들을 풀어서 설명해 드릴게요! 쉽게 이해하실 수 있도록 최대한 풀어서 설명할 테니, 걱정 마세요.
일단, 제일 중요한 건 이 둘이 하는 일이 다르다는 거예요. null=True는 데이터베이스 자체에 영향을 주는 거고, blank=True는 Django가 데이터 유효성 검사를 할 때 빈 값을 허용할지 말지를 결정하는 거죠. 쉽게 말해, null=True는 데이터베이스에 "이 필드는 비어있어도 괜찮아!"라고 알려주는 거고, blank=True는 Django에게 "이 필드에 아무것도 안 써도 괜찮아!"라고 말하는 거라고 생각하시면 돼요.
예를 들어볼게요. 제가 만든 프로젝트 중에 회원 정보를 저장하는 모델이 있었는데, 거기에 '주소' 필드가 있었어요. 주소는 필수 정보는 아니잖아요? 그래서 저는 null=True와 blank=True를 둘 다 설정했어요. 그랬더니, 데이터베이스에는 주소가 없는 회원 정보도 저장할 수 있었고, Django에서 회원 가입 폼을 만들 때도 주소를 안 써도 에러가 나지 않았어요. 정말 편리하더라고요!
하지만, null=True를 함부로 쓰면 안 되는 경우도 있어요. 예를 들어, 회원의 '아이디' 같은 필수 정보는 절대 비워둘 수 없잖아요? 이런 경우에는 null=False와 blank=False로 설정해야 합니다. 안 그러면 데이터베이스에 문제가 생길 수도 있고, 엉뚱한 에러가 발생할 수도 있거든요. 이 부분은 꼭 기억해주세요!
자, 그럼 코드 예시를 보여드릴게요. 아래 코드는 제가 실제로 사용했던 코드인데, 회원 정보를 저장하는 모델이에요.
from django.db import models
class Member(models.Model):
name = models.CharField(max_length=100, null=True, blank=True) # 이름 (선택)
email = models.EmailField(unique=True) # 이메일 (필수, 중복 불가)
address = models.TextField(null=True, blank=True) # 주소 (선택)
phone = models.CharField(max_length=20, null=False, blank=False) # 전화번호 (필수)
보시다시피, 이름과 주소는 null=True와 blank=True를 둘 다 설정했고, 이메일은 중복을 허용하지 않도록 unique=True를 설정했어요. 그리고 전화번호는 필수 정보이기 때문에 null=False와 blank=False로 설정했죠.
마지막으로, 중요한 팁 하나 더 드릴게요! null=True를 사용하면 데이터베이스 쿼리를 작성할 때 NULL 값을 어떻게 처리할지 신경 써야 해요. Django ORM에서 제공하는 isnull()이나 __isnull 같은 기능을 사용하면 NULL 값을 쉽게 처리할 수 있으니, 이 부분도 잘 알아두시면 좋을 것 같아요. 그럼 이제 Django 모델 설계가 좀 더 자신감 있게 느껴지시나요? 궁금한 점 있으면 언제든지 질문해주세요!
댓글
댓글 쓰기