본문 바로가기
Django11

Django Models

by 자동매매 2023. 4. 28.

Introduction to Django models

Django에서 모델은 django.db.models.Model 클래스의 하위 클래스입니다  . 모델에는 필드를 조작하는 하나 이상의 필드와 메서드가 포함되어 있습니다.

기본적으로 Django 모델은 모델의 필드가 테이블의 column 나타내는 데이터베이스의 단일 테이블에 매핑 됩니다.

응용 프로그램에는 models.py 모듈에 저장된 0 이상의 모델이 있을 있습니다. 예를 들어 다음은 blog 응용 프로그램에 대한 Post 모델을 정의합니다.

 

from django.db import models
from django.utils import timezone 

class Post(models.Model):
    title = models.CharField(max_length=120)
    content = models.TextField()
    published_at = models.DateTimeField(default=timezone.now)

 

Post 모델에는 title, content published_at 필드가 있습니다. Post 모델을 기반으로 Django 다음 SQL 코드를 사용하여 데이터베이스에 테이블 만듭니다.

 

CREATE TABLE "blog_post" (
  "id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
  "title" varchar(120) NOT NULL,
  "content" text NOT NULL,
  "published_at" datetime NOT NULL,
);

 

테이블 blog_post 이름은  응용 프로그램 모델 이름에서 자동으로 파생됩니다.

 

application.model

 

예제에서 Django Post 모델에 대한  테이블 blog_post 만듭니다.

Django에서 생성된 기본 이름을 사용하는 대신 테이블 이름을 지정하려면 다음과 같이 Meta 클래스의 db_table 속성을  사용할  있습니다.

 

from django.db import models
from django.utils import timezone


class Post(models.Model):
    title = models.CharField(max_length=120)
    content = models.TextField()
    published_at = models.DateTimeField(default=timezone.now)
    
    class Meta:
        db_table = 'posts'

 

경우 Post 모델은  생성된 blog_post 테이블 대신 posts 테이블에  매핑됩니다  .

 

테이블을 생성할 Django 자동으로 id 필드를 테이블의 기본 키(primary key)로  추가합니다. id 필드는 프로젝트의 settings.py 파일에 지정된 type 자동 증가 필드입니다.

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

 

id가 아닌 다른 field ( post_id )를  primary_key로 지정하려면 다음처럼 지정한다.(id필드는 자동 미생성)

 

post_id = models.BigAutoField(primary_key=True)

 

Using models

모델을 정의한 후에는  프로젝트 settings.py INSTALLED_APPS 목록에  애플리케이션 이름을 등록하여 모델을 사용할 것임을 Django 알려야 합니다.

 

INSTALLED_APPS = [
    # ...
    'blog',
]

 

Built-in models

Django에는 User  from django.contrib.auth.models 모듈과 같은 내장 모델이 함께 제공됩니다  . 사용자 모델을 사용하려면  models.py 파일로 import해야 합니다.

 

from django.contrib.auth.models import User

Foreign keys

blog 애플리케이션 내의 각각의 포스트   사용자에 의해 생성되고, 사용자는 0 이상의 포스트를 생성할 있다. 이를 일대다 관계라고 합니다.

일대다 관계를 모델링하려면 ForeignKey 필드를 사용합니다.

 

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User


class Post(models.Model):
    title = models.CharField(max_length=120)
    content = models.TextField()
    published_at = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)

In this example, the auth_id is a foreign key that creates a relationship between blog_post table and auth_user table. Note that the auth_user table is the Django-provided table.

 

The __str__() method

Post 모델의 인스턴스를 문자열로 사용하면 Django __str__() 메서드를 호출하고 결과를 표시합니다.

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User


class Post(models.Model):
    title = models.CharField(max_length=120)
    content = models.TextField()
    published_at = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    

    def __str__(self):
        return self.title

 

Adding Meta class to the Model class

Meta 클래스를 사용하면 모델을 구성할 있습니다. 예를 들어, 다음은 Post 모델 클래스 내에서 Post를  내림차순(-published_at)으로  published_at별로 정렬하는 Meta 클래스를  정의합니다.

 

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Post(models.Model):
    title = models.CharField(max_length=120)
    content = models.TextField()
    published_at = models.DateTimeField(default=timezone.now)
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    

    def __str__(self):
        return self.title
    
    class Meta:
        ordering = ['-published_at']

모델을 정의한 마이그레이션 만들고 적용하여 데이터베이스에 테이블을 만들 있으며, 이에 대해서는 다음 자습서에서 설명합니다.

Summary

  • Django 애플리케이션의 models.py 파일에서 모든 모델을 정의합니다.
  • django.db.models.Model에서 상속되는 클래스를 정의하여 모델을 만듭니다.
  • 모델은 데이터베이스의 테이블에 매핑되며, 각 필드는 데이터베이스 테이블의 column에 매핑됩니다.
  • __str__() 메서드를 재정의하여 모델의 문자열 표현을 반환합니다.
  • Meta 클래스를 사용하여 모델을 구성합니다.

 

 

 

 

'Django11' 카테고리의 다른 글

Django Flash Messages  (0) 2023.04.29
Django Migrations  (0) 2023.04.28
Django 배포  (0) 2023.04.14
Getting Started with Django  (0) 2023.04.08
Django Create App  (0) 2023.04.08

댓글