Django/기초

[Django] 장고 입문 4. Model 과 Admin

민돌v 2021. 6. 13. 23:11

실습을 하기 전에 장고 model과 admin의 이해도를 올리기위한 개념을 집고 넘어간다.

1. 장고 ORM이란 무엇인가?

- ORM이란 (Object-Relational Mapping), 객체(Object)와 관계형 데이터베이스의 데이터를 매핑해주는것을 의미한다.

- 서버에서 데이터베이스의 모델들을 관리하기 위해서는 관계형 데이터베이스를 연동하여 SQL언어로 관리해야한다.

- 하지만 ORM 라이브러리는 각 프로그래밍 언어를 활용하여 sql 코드로 변환시켜 활용한다. 따라서 따로 sql구문을 몰라도 데이터들을 관리(CRUD) 할 수 있도록 도와준다.

- 장고에서는 Django Model 이 ORM이다.

(ORM 예시)

Java : Hibernate / PHP : Propel & Doctrine / Python : Django ORM & SQLAlchemy / C# : NHibernate & Entity Framework

2. QuerySet

- Sql을 생성해주는 인터페이스 이다.

- 쿼리셋을 이용하면 수많은 객체를 일일이 반환하지 않고 한번에 넘겨줄 수 있다.

- queryset을 통하여 별도로 SQL을 작성할 필요 없이 DB로 부터 데이터를 가져오고 추가, 수정, 삭제가 가능하다.

- Model Manager를 통해서 해당 Model에 대한 QuerySet을 획득한다.

* Post.objects.all() : “SELECT * FROM post…” 와 같은 SQL문 생성

* Post.objects.create() : “INSERT INTO post VALUES(…)” 와 같은 SQL문 생성

이제 다시 실습을 해보자


1. Model

- 데이터에 접속하고 관리하도록하는 객체( 데이터베이스와 장고와의 커뮤니케이션)

1) Model의 생성 및 적용

- Models.py를 작성하였다면, Models.py는 Django의 것이기 때문에

DB가 알아들을 수 있도록 번역해야한다.

$ python manage.py makemigrations (App 이름) $ python manage.py migrate (App 이름)

 

2) Models.py 작성

- 모델 클래스를 정의해준후 각 변수에 맞는 필드를 할당해줍니다.

- 이미지는 밑에서 다루겠습니다.

모델 작성 후

1. python manage.py makemigrations (번역)

2. python manage.py migrate (적용)

 

2. Admin

- model을 만들었다면, db에 접근할 수 있는 슈퍼유저(루트계정)을 만들어줍니다.

1) python manage.py createsuperuser

- 주소 스킵 가능

- 비밀번호 안보임

2) admin 페이지 이동

- 루트계정을 만든 후, 서버를 돌립니다. ( python manage.py runserver)

- 주소창에 /admin 을 붙히면 관리자 창으로 이동합니다.

- 방금 만들어준 아이디로 로그인 해줍니다.

- 로그인을 하면, 다음과 같은 창이 나오는데, 방금 만들어준 Designer 모델이 적용되지 않았습니다.

- 그 이유는, Admin에게 Model을 알려주지 않았기 때문입니다.

3) Admin에게 Model 알려주기

- admin.py에 생성한 모델을 추가해 준후, 웹페이지를 새로고침해 주면 생성한 Designers 모델이 적용된 모습을 확인할 수 있습니다.

 

3. ImageField - 장고 이미지 추가하기

1) Settingss.py 설정하기

-MEDIA_URL 과 MEDIA_ROOT 를 설정해 준다.

2) ImageField

- imagefield를 설정해준다.

- null = True 는 데이터베이스 상에 Null값을 허용해준다는 의미이다.

- blank = True는 모델을 추가할 때 값이 없는걸 허용해준다는 의미이다.

- upload_to : 해당 경로에 이미지를 저장하겠다는 의미이다.

- Django 서버에 이미지를 올리기 위해서는 해당 라이브러리를 install 해주어야한다.

- $ pip install pillow

- 그 후 miagrations를 해주면, static/media 폴더가 생성된다.

+

+

+

(Admin 에서 데이터 추가 화면, model에 작성해준데로 필드가 생성되었다.)

(return self.name 으로 "홍길동" 이름도 잘 적용됨)