#models.py
from django.db import models
# Create your models here.
class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField('Author')
publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE)
publication_date = models.DateField()
def __str__(self):
return self.title
class Author(models.Model):
name = models.CharField(max_length=50)
salutation = models.CharField(max_length=500)
email = models.EmailField()
def __str__(self):
return self.name
class Publisher(models.Model):
name = models.CharField(max_length=50)
address = models.CharField(max_length=100)
website = models.URLField()
def __str__(self):
return self.name
- Book 테이블 생성
컬럼:title, authors, publisher, publication_date
authors는 Book과 Author 테이블이 다대다 관계이므로 ManyToManyField를 사용했고 publisher 컬럼은 Publisher과 Book 테이블이 외래키 관계이기 때문에 ForeignKey를 사용하여 관계를 정의하여 주고 on_delete=model.CASCADE 파라미터를 통해 외래키 관련 레코드가 사라질 경우 해당 외래키와 관련된 레코드들이 지워지는 설정으로 데이터베이스 무결성을 지키기 위함이다.
- Author 테이블 생성
컬럼: name, salutation, email
- Publisher 테이블 생성
컬럼: name, address, website
__str__ 메소드는 admin 페이지에서 해당 레코드가 어떻게 보여질지를 설정할 수 있는 함수이다.
- Admin 페이지에 모델 등록하기 및 Admin 페이지 커스텀 하기
from django.contrib import admin
from polls.models import Question, Choice
# Choice 모델을 테이블 형식으로 Inline 생성
# 이것은 Question 모델을 추가할 때 Choice 모델을 같이 보기 위해 사용됨
# extra 2개씩 추가로 보여줌
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 2
class QuestionAdmin(admin.ModelAdmin):
# 필드를 분리하여 보여주기
# 필드를 설명하는 제목, 필드명, 적용할 옵션
# collapse: 필드내용 Hide/Show 기능 추가
# fields = ['pub_date', 'question_text'] -> 등록 페이지에서 컬럼 순서 변경
fieldsets = [
('Question Statement', {'fields':['question_text']}),
('Date Information', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
# 같이 볼 모델 클래스
inlines = [ChoiceInline]
# admin 페이지에서 보여질 테이블 컬럼
list_display = ('question_text', 'pub_date')
# 필터 위젯 추가
list_filter = ['pub_date']
# 검색 박스 표시
search_fields = ['question_text']
# admin 사이트에 모델 등록
admin.site.register(Question, QuestionAdmin)
admin.site.register(Choice)
- 결과 화면

'Django' 카테고리의 다른 글
| 9. View 구성 - 함수형 뷰 구성 (0) | 2021.04.08 |
|---|---|
| 8. URLconf - URL 정의 (Path Converter, 정규표현식) (0) | 2021.04.08 |
| 6. Django 웹 프레임워크 (0) | 2021.04.07 |
| 5. WSGI (Web Server Gateway Interface) (0) | 2021.04.07 |
| 4. CGI (Common Gateway Interface) (0) | 2021.04.07 |