장고 모델(Model) 이해하기
모델이란?
장고에서 모델은 데이터베이스 테이블을 정의하는 Python 클래스를 의미합니다. 각 모델 클래스는 데이터베이스의 한 테이블에 대응하며, 클래스의 속성은 테이블의 열(Column)에 대응합니다. 예를 들어, Post 모델에서는 제목과 내용을 나타내는 title, content 같은 속성을 정의할 수 있습니다. 모델을 사용하면 SQL 쿼리 없이 데이터베이스 작업을 할 수 있게 됩니다. 장고의 ORM(Object-Relational Mapping)을 활용해 데이터를 객체처럼 다룰 수 있는 장점이 있습니다.
모델 클래스 정의하기
모델을 정의하려면 앱명/models.py 파일에서 클래스를 생성하고, models.Model을 상속받습니다. 각 클래스 변수는 데이터베이스 필드를 정의하며, 이를 통해 테이블의 구조를 결정합니다. 예를 들어, title = models.CharField(max_length=100)처럼 각 필드를 정의하고, IntegerField, DateTimeField 등 다양한 필드를 사용할 수 있습니다. 모델을 정의한 후에는 makemigrations와 migrate 명령어를 통해 실제 데이터베이스에 적용됩니다.
모델 필드 종류
장고 모델에서는 여러 가지 필드를 제공하여 다양한 데이터 형식을 지원합니다. 대표적인 필드로는 CharField, TextField, IntegerField, DateTimeField, BooleanField 등이 있습니다. 예를 들어, CharField는 짧은 텍스트를 저장하고, TextField는 긴 텍스트를 저장하는 데 사용됩니다. 각 필드는 데이터 유형을 정의하며, max_length, default, null 등의 옵션을 추가해 필드의 특성을 설정할 수 있습니다.
모델 관계 설정하기
장고 모델은 다른 모델과의 관계를 정의할 수 있습니다. 대표적인 관계로는 1:1 관계, 1:N 관계, N:M 관계가 있습니다. ForeignKey는 1:N 관계를 설정하고, OneToOneField는 1:1 관계를 설정하며, ManyToManyField는 N:M 관계를 설정합니다. 예를 들어, Post 모델과 Author 모델 간의 관계를 설정하려면 author = models.ForeignKey(Author, on_delete=models.CASCADE)와 같이 설정합니다. 이러한 관계 설정을 통해 데이터베이스에서 연관된 데이터를 쉽게 조회하고 조작할 수 있습니다.
모델 메서드 및 쿼리셋
모델 클래스는 데이터에 대한 처리를 추가할 수 있는 메서드를 정의할 수 있습니다. 예를 들어, 모델 내에 __str__ 메서드를 정의하면 해당 모델 인스턴스를 출력할 때 원하는 정보를 표시할 수 있습니다. 또한, 장고의 쿼리셋(QuerySet) 기능을 사용하여 데이터베이스에서 객체를 쉽게 조회하고 필터링할 수 있습니다. 예를 들어, Post.objects.all()은 모든 게시글을 반환하고, Post.objects.filter(title__contains="Django")는 제목에 "Django"가 포함된 게시글을 조회합니다.