참고





전체 코드


from django.db import models

class ReadingList(models.Model) :

    BOOK_SCORE = ( 
        ('Awesome', 'Awesome'),
        ('Boring', 'Boring'), 
        ('Choigo', 'Choigo'),
        ('Hell', 'Hell'),
    )

    #책 제목 
    title = models.CharField(max_length=50)

    #서평 
    review = models.TextField(help_text="가차없이 적어라!!")

    #평점
    score = models.CharField(
        max_length=15,
        choices=BOOK_SCORE,
        default='Awesome',
    )

    #책 정보
    book_info_url = models.URLField() #url이라고 바꿔주기 

    #시작일, 완독일
    start_date = models.DateTimeField(blank=True, null=True) 
    finished_date = models.DateTimeField(
        auto_now_add=True) #편집 불가. 자동으로 오늘 날짜로 맞춘다. #편집 가능하고, 오늘 날짜로 하고 싶으면 datetime.now()를 쓸 것.

    def __str__(self) : 
        return self.title 
    
class Book(models.Model) :

    # title = models.OneToOneField(ReadingList, on_delete=models.CASCADE)
    title = models.ForeignKey('ReadingList', on_delete=models.CASCADE)
    writer = models.CharField(max_length=50)
    plot = models.TextField(help_text="줄거리")
    published_year = models.DateTimeField(blank=True)

    def __str__(self) :
        return '%s :  %s ' % ( self.title, self.writer)





코드 설명

1. 모델의 클래스 이름은 항상 ‘단수’로 한다.

Django는 admin 첫 페이지에서 모델명을 나타낼 때, 모델명에 s를 붙여 복수형으로 나타낸다.

내가 만약, Project라는 모델 클래스를 만들면, admin에서는 projects와 같이 복수형으로 띤다.

따라서, projectss 처럼 나타나는 걸 방지하기 위해 ‘단수’로 입력한다.


class ReadingList(models.Model) :



2. verbose_name

필드 레이블. 지정되지 않으면 필드명이 쓰인다.


content = models.TextField(verbose_name='내용')



3. 마이그레이션

Model 을 추가한 뒤에는 마이그레이션 과정을 거친다.



(가상환경) 폴더 경로>python manage.py makemigrations
Migrations for 'myblog':
  myblog\migrations\0001_initial.py
    - Create model ReadingList


(가상환경) 폴더 경로>python manage.py migrate myblog
Operations to perform:
  Apply all migrations: myblog
Running migrations:
  Applying myblog.0001_initial... OK



4. 관리자 계정이 없다면 생성해주어야 한다.

password 부분은 원래 무엇을 입력하든 보이지 않는다.


(가상환경) 폴더 경로>python manage.py createsuperuser
사용자 이름 (leave blank to use '-'):
이메일 주소: user@gmail.com
Password:
Password (again):
Superuser created successfully.



5. 그리고 admin.py에 모델 추가

그럼 127.0.0.1:8000/admin 에서 확인 가능하다.


from django.contrib import admin
from .models import ReadingList

# Register your models here.
admin.site.register(ReadingList)