Django 기초 - Model 생성 및 Admin 설정

ID짱재·2021년 7월 20일
0

Django

목록 보기
6/43
post-thumbnail

🌈 Model 생성 및 Admin Site 설정

🔥 Model 생성

🔥 Admin 설정


1. Model 생성

1) makemigrations & migrate

  • Model이란 데이터베이스에 저장될 테이블과 필드를 지정하는 역할을 해요.
  • Django의 ORM 기법으로 SQL문법을 몰라도 DB를 제어할 수 있도록 python 문법을 제공합니다.
  • 게시글의 제목, 추천수, 조회수, 내용 필드를 아래와 같이 만들 수 있어요.
from django.db import models
# Create your models here.
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번호를 지정합니다.
# Generated by Django 3.2 on 2021-04-15 06:06
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 # 👈 models.py에서 Notice를 가져옴  
# Register your models here.
admin.site.register(Notice) # 👈 Notice 클래스를 admin에 등록

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
# Create your models here.
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
# Create your models here.
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):  # admin에서 표시될 user 필드 정보 설정
        return self.title
    class Meta:
        db_table = 'main_board'
        verbose_name = '게시글' 
        verbose_name_plural = '게시글' 

  • 여러개의 필드값을 admin site를 통해 노출시키고 싶다면 admin.py에서 "list_display"를 사용해서 필드값을 지정해주면 됩니다.
  • 현재는 제목에만 link가 표시되는게 나타나는데요, 이를 통해서 생성한 데이터 안으로 접근할 수 있어요. 다른 필드값에도 링크 기능을 적용하고 싶다면, "list_display_links"에 필드값을 지정해주면 됩니다.
from django.contrib import admin
from .models import Notice
# Register your models here.
@admin.register(Notice) 
class NoticeAdmin(admin.ModelAdmin):
    list_display = ['title', 'likeCount', 'viewCount']
    list_display_links = ['title', 'likeCount', 'viewCount']

profile
Keep Going, Keep Coding!

0개의 댓글