[django 기초] 장고의 model과 admin 다루기
model
데이터베이스에 저장될 테이블을 정의한다. 테이블은 models.py
에서 정의되며 테이블을 하나의 클래스로 정의하고 테이블의 컬럼은 클레스의 변수(속성)으로 매핑한다.
CharField()
: 길이 지정이 필요한 문자열IntegerField()
: 정수형을 받을 수 있는 타입TextField()
: 길이 지정이 필요 없는 문자열
#출처 : 파이썬 페이스북 클론 (인프런)
from django.db import models
class Notice(models.Model):
title = models.CharField(max_length=200)
likedCount.= models.IntegerField()
view = models.IntegerField()
contents = models.TextField()
이렇게 정의한 것을 DB에 생성시켜 주기 위해서는 migration
을 해 주어야 한다.
python manage.py makemigrations
반영이 되면 다음과 같이 모델이 생성되었다는 말과 함께 [models.py](http://models.py)
를 수정한 애플리케이션 폴더 내에 migration
이라는 폴더가 생성되게 된다.
그 다음 이것을 DB에 반영해주는 작업이 필요하다. 다음 코드를 입력해주자.
python manage.py migrate
이제 [admin.py](http://admin.py)
를 수정해 보자. 방금 작성한 Notice
를 다음과 같이 등록해주면 이제 admin에서 다음과 같이 나타난다.
from django.contrib import admin
from .models import Notice
# Register your models here.
admin.site.register(Notice)
이제 Add
버튼을 눌러주면 방금 전에 생성했던 model을 admin
페이지에서 등록할 수 있다.
완전 짱이다. 굿굿. 👍
여기에 임시로 데이터를 채워서 등록해보자. 그러면 다음과 같이 나타나게 될 것이다. 우리가 비록 Title
이라는 데이터를 만들었지만 DB는 얘가 타이틀인지 모르기 때문이다.
이제 이것을 우리가 정한 Title
이 나타나도록 해주기 위해 [models.py](http://models.py)
에 __str__
로 정의해준다.
class Notice(models.Model):
title = models.CharField(max_length=200)
likedCount= models.IntegerField()
view = models.IntegerField()
contents = models.TextField()
def __str__(self):
return self.title
뭔가 진짜 개발자 같구나. 짱짱.
만약! likedCount를 같이 보고 싶다면 어떻게 해야할까? 다음과 같이 변경해보자. 짱
~
def __str__(self):
return f'{self.title}:{self.likedCount}'
그런데 사실 우리는 이런 표현을 원하지 않는다. 리스트에 따로 따로 이걸 표시해줘야지... 그러면 [admin.py](http://admin.py)
를 다시 수정해주자. 앞에서 했던 admin.site.register(Notice)
를 삭제하고 다음 코드를 입력해준다.
@admin.register(Notice)
class NoticeAdmin(admin.ModelAdmin):
list_display=['title', 'likedCount']
그래 이게 DB지
~
만약 여기에서 likeCount도 링크로 처리하고 싶다면 밑에 다음 구문을 추가해주면 된다.
list_display_links=['title', 'likedCount']