40 django 모델 테이블 만들기

40.1 테이블만들기 - create table

8 장고 model 만들기 - MySQL 테이블 에서는 manager를 이용해 만들었습니다.

이번에는 테이블을 직접 생성하고
모델에 등록하는 방법으로 해보겠습니다.

py_blog_detail 테이블을 만들고 FK도 추가합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
CREATE TABLE `py_blog_detail` (
  `id` int(11) NOT NULL ,
  `detail_id` int(11) NOT NULL,
  `sub_title` varchar(100) DEFAULT NULL,
  `img_url` varchar(200) DEFAULT NULL,
  `img_size` varchar(3) DEFAULT NULL,
  `content_body` text,
  PRIMARY KEY (`id`),
  KEY `py_blog_detail_FK` (`detail_id`),
  CONSTRAINT `py_blog_detail_FK` FOREIGN KEY (`detail_id`) REFERENCES `py_blog` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

40.2 테이블 스키마 가져오기 - inspectdb

inspectdb 명령어를 실행하면 모델에 등록할 수 있는 스키마가 나옵니다.

py_blog_detail 스키마를 찾아 복사합니다.

1
python manage.py inspectdb

40.3 장고 모델 등록 - model.py

모델에 붙여넣기 합니다.
join할때 사용하고자 related_name 을 추가했습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
#myapp/blog/model.py

class PyBlogDetail(models.Model):    
    detail = models.ForeignKey(PyBlog, models.DO_NOTHING, related_name="pb_detail")
    sub_title = models.CharField(max_length=100, blank=True, null=True)
    img_url = models.CharField(max_length=200, blank=True, null=True)
    img_size = models.CharField(max_length=3, blank=True, null=True)
    content_body = models.TextField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'py_blog_detail'