관리 메뉴

Leo's Garage

Django #2 app 만들기 본문

Study/Django

Django #2 app 만들기

LeoBehindK 2022. 12. 28. 00:40
728x90
반응형
from django.db import models

# Create your models here.
class House(models.Model):
    
    """Model Definition for House"""
    name = models.CharField(max_length=140)
    price = models.PositiveIntegerField()
    description = models.TextField()
    address = models.CharField(max_length=140)

Django에서 설계할 때는 마치 블럭을 쌓는 것과 같이 설계를 하게 된다. 

무슨 말이냐 하면, 어떤 기능을 구현하려고 할 때, 그 기능에 필요한 데이터와 로직을 캡슐화해서 개발할 수 있게 해준다는 것이다.

 

그러한 개념을 Django에서는 app이라고 한다. 

한 가지 app을 개발하면서 그 개념을 이해해보도록 하자

python manage.py startapp houses

위와 같이 입력하면 파일경로에 다음과 같은 파일들이 생성된다.

houses
 ㄴ__pycahe__
 ㄴmigrations
 ㄴ__init__.py
 ㄴadmin.py
 ㄴapp.py
 ㄴmodels.py
 ㄴtests.py
 ㄴviews.py

생성한 houses라는 app은 자신만의 데이터 구조와 로직을 가지는 기능의 블럭이다.

따라서 이 houses에서 사용할 데이터 구조를 만들어줄 필요가 있다.

models.py가 그 역할을 하게 된다. 

해당 파일에 들어가서 아래와 같이 입력해보자

from django.db import models

# Create your models here.
class House(models.Model):
    
    """Model Definition for House"""
    name = models.CharField(max_length=140)
    price = models.PositiveIntegerField()
    description = models.TextField()
    address = models.CharField(max_length=140)

House라고 하는 Class를 생성하였는데. models.Model을 상속받고 있다. 

이 상속받은 클래스의 속성을 사용하여 각 property들의 상세 type을 정해줄 수 있다. 

왜 이렇게 각 property의 Type을 명확하게 정의하냐면 이 내용들을 Data Base에서 이해할 수 있어야 하기 때문이다. 

이렇게 정의한 House라는 데이터 구조를 DB에 알려줘야 한다. 

그 전에 DB가 이해할 수 있는 구조를 생성해줘야 하는데 

python manage.py makemigrations
Migrations for 'houses':
  houses/migrations/0001_initial.py
    - Create model House

위와 같이 0001_initial.py에는 

# Generated by Django 4.1.4 on 2022-12-27 14:02

from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name="House",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("name", models.CharField(max_length=140)),
                ("price", models.PositiveIntegerField()),
                ("description", models.TextField()),
                ("address", models.CharField(max_length=140)),
            ],
        ),
    ]

Djago가 model.py를 참고하여 자동 생성된 코드가 나오게 된다. 

이 코드를 통해서 Data Base가 이해할 수 있는 데이터 구조를 생성하게 된다 .

또한 해당 데이터를 admin 화면에서 수정할 수 있게 하려면, admin.py를 수정해야 한다. 

admin.py를 아래와 같이 수정하자 

from django.contrib import admin
from .models import House

# Register your models here.
@admin.register(House)
class HouseAdmin(admin.ModelAdmin):
    pass
    # only inherit

pass라고만 입력 시, 오로지 상속받은 클래스 내용을 그대로 사용하겠다는 것이다. 

자 이제 Data Base에 해당 내용을 전달하도록 하자. 

python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, houses, sessions
Running migrations:

자 이제 houses에 대한 데이터 구조도 이해하게 되었다. 

 

위와 같이 Houses에 대한 내용이 admin 페이지에 나타나게 된다. 

House를 클릭해서 들어가면 

위와 같이 각각 property들을 수정할 수 있는 수정 페이지가 나타나게 된다.

728x90
반응형

'Study > Django' 카테고리의 다른 글

Django #6 Make models more - 1  (0) 2023.01.02
Django #5 Users App custom -2  (0) 2023.01.02
Django #4 Users App custom -1  (0) 2022.12.30
Django #3 admin 기능 추가해보기  (0) 2022.12.28
Django #1 프로젝트 셋업 및 기본 동작 확인  (0) 2022.12.27
Comments