🌈 Model 생성 및 Admin Site 설정
🔥 Model 생성
🔥 Admin 설정
1. Model 생성
1) makemigrations & migrate
- Model이란 데이터베이스에 저장될 테이블과 필드를 지정하는 역할을 해요.
- Django의 ORM 기법으로 SQL문법을 몰라도 DB를 제어할 수 있도록 python 문법을 제공합니다.
- 게시글의 제목, 추천수, 조회수, 내용 필드를 아래와 같이 만들 수 있어요.
from django.db import models
class Notice(models.Model):
title = models.CharField(max_length=100)
likeCount = models.IntegerField()
viewCount = models.IntegerField()
contents = models.TextField()
- 모델에 필드를 지정하였다면, DB에 반영하기 위해서 2가지 명령이 필요합니다.
1) 🔍 python manage.py makemigrations
2) 🔍 python manage.py migrate
- models.py의 Class를 통해 DB에 Model을 만들어주는 명령이 1번이고, 만들어진 모델을 DB에 적용시키는 역할을 하는 것이 2번 명령이에요.
- 1번 명령을 터미널에 실행시켜보면, migrations 디렉토리에 파일이 하나 생성되 것이 나타난 것을 볼 수 있는데요,, 이를 살펴보면 방금 직접 작업한 필드와 함께 'id'필드가 추가된 것을 볼 수 있어요.
- 이 'id'필드는 추후 pk라는 변수를 통해 모델 내 객체를 찾아올 때 사용하고, DB에 데이터가 추가될 때 마다 해당 데이터에 순차적인 index번호를 지정합니다.
from django.db import migrations, models
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Notice',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100)),
('likeCount', models.IntegerField()),
('viewCount', models.IntegerField()),
('contents', models.TextField()),
],
),
]
2. Admin 설정
1) admin.site.register()
- Model을 DB에 반영시켰다면, Model을 admin.py를 통해 등록해주어야지 Admin Site에서 위에서 만든 Model을 볼 수 있답니다.
- Admin Site에 Model 등록 방법은 Model에서 클래스를 import한 뒤, admin.site.register()를 통해 가능해요.
from django.contrib import admin
from .models import Notice
admin.site.register(Notice)
2) verbose_name & verbose_name_plural
- 등록한 Model은 Notice인데,, 복수형인 Notices로 나타난 것을 볼 수 있어요,, 이는 Django에서 알아서 s를 붙여주기 때문입니다. Class가 표시되는 명칭을 수정하고싶다면 verbose_name 또는 verbose_name_plural을 통해 값을 지정해주면 되요!
- 물론, Model에 변경사항이 있었기 때문에 makemigrations 및 migrate를 실시해줘야 해요!
from django.db import models
class Notice(models.Model):
title = models.CharField(max_length=100, verbose_name='제목')
likeCount = models.IntegerField(verbose_name='추천수')
viewCount = models.IntegerField(verbose_name='조회수')
contents = models.TextField(verbose_name='내용')
class Meta:
db_table = 'main_board'
verbose_name = '게시글'
verbose_name_plural = '게시글'
3) __str__
매서드
- DB에 데이터를 삽입하는 방법으로는 크게 관리자 권한으로 생성(admin site), 대량 생성(seeding), shell에서 생성하는 방법으로 나뉩니다.
- Admin Site에서 ADD버튼을 통해 아래와 같이 6개의 test 데이터를 생성하였을 때, 게시글의 제목이 모두 Class의 이름으로 나타나는 것을 볼 수 있어요:)
- 명확히 구분하기 위해 각 게시글의 제목이 나타나면 좋을 것 같아요,, 이럴 때는
__str__
매서드를 통해 각 Object를 지칭할 이름을 반환해주면 됩니다.
from django.db import models
class Notice(models.Model):
title = models.CharField(max_length=100, verbose_name='제목')
likeCount = models.IntegerField(verbose_name='추천수')
viewCount = models.IntegerField(verbose_name='조회수')
contents = models.TextField(verbose_name='내용')
def __str__(self):
return self.title
class Meta:
db_table = 'main_board'
verbose_name = '게시글'
verbose_name_plural = '게시글'
4) list_display & list_display_links
- 여러개의 필드값을 admin site를 통해 노출시키고 싶다면 admin.py에서 "list_display"를 사용해서 필드값을 지정해주면 됩니다.
- 현재는 제목에만 link가 표시되는게 나타나는데요, 이를 통해서 생성한 데이터 안으로 접근할 수 있어요. 다른 필드값에도 링크 기능을 적용하고 싶다면, "list_display_links"에 필드값을 지정해주면 됩니다.
from django.contrib import admin
from .models import Notice
@admin.register(Notice)
class NoticeAdmin(admin.ModelAdmin):
list_display = ['title', 'likeCount', 'viewCount']
list_display_links = ['title', 'likeCount', 'viewCount']