티스토리 뷰

장고 모델을 설정, 시작해보겠습니다.


http://suspected.tistory.com/entry/Django-%EC%84%A4%EC%B9%98%EB%B6%80%ED%84%B0-%EC%84%A4%EC%A0%95%EA%B9%8C%EC%A7%80


위의 게시물에서 startapp 으로 앱을 실행하게 되고 "앱이름" 폴더 안에 models.py 라는 파일에서 모델링을 할 수가 있습니다.


장고에서 미리 만들어놓은 모델에 관한 각종 객체, 함수들이 들어있는 django.db.models 패키지를 사용할 수 있게 되어 있습니다. 이 패키지에는 Model이라는 객체가 있는데 이 객체에 기본적인 모델이 만들어져 있습니다. 따라서 우리는 이 Model을 상속받아서 필요한 모델을 만들게 됩니다. 


아래 코드를 보면 bob라는 모델을 만들고, class bob(models.Model) 라는 구문을 통해 models.Model을 상속받은 bob라는 객체를 만들었습니다. 각 모델객체는 객체변수들을 멤버로써 가질 수 있습니다.


이 suspect라는 모델에서는 name이라는 변수를 models.CharField형의 객체변수로 만들었습니다. 여기서는 CharField라는 타입을 지정해 주면서 name이라는 필드가 문자열을 저장하고 100글자의 길이 제한이 있는 필드라는 것을 나타냅니다.


이런 식으로 장고에서는 모델에 들어갈 각 필드(데이터)들이 어떤 형태를 갖는지 나타내 줘야 합니다. 각 필드는 형태에 맞는 models.Field의 파생 객체들로 만들어져 있습니다. 


CharField : 문자열 저장하는 필드

DateTimeField : 날짜와 시간을 저장하는 공간


모델을 만들고 이제 이 모델을 DB에 적용하기 위해서는 뭘 해야할까요? 바로 manage.py syncdb 를 실행해 줘야 합니다. syncdb를 수행하게 되면 장고는 settings.py의 INSTALLED_APPS에 있는 APP들의 모델을 확인하여 추가, 삭제 된 모델이 있다면 DB에 이를 반영시켜 줍니다.

맨 밑 줄을 보시면, setting.py 에서 DB이름을 suspecting_bob 로 주었던 것이 여기서 테이블로 생성이 됩니다.


* settings.py 에서 DB name 부분에는 app을 만들었던 name과 중복이 되면 오류가 납니다. 





birthday 필드를 추가하고, manage.py sql suspect[앱 이름] 을 통해 장고가 생성한 모델을 확인 할 수도 있고 장고 관리자에서 모델이 제대로 생성 되었는지 확인 할 수 있습니다.





이제 모델을 관리자 페이지에 표시하기 위해서 APP 폴더 (suspecting)에 admin.py라는 파일을 만들고 아래와 같이 작성합니다. 'admin.site.register' 는 Admin 모듈에 모델을 등록 하는 것입니다. 이렇게 모듈에 등록을 해야 관리자 화면에 모델이 나타나게 됩니다. 




manage.py runserver 명령을 이용하여 서버를 시작하고 admin 페이지로 접속하면 아래와 같은 페이지가 나옵니다. 





admin 페이지에서 오류가 난다면 'from django.contrib import admin'을 작성해주고, settings.py에서 'django.contrib.admin' 부분을 주석 해제해주시면 됩니다. 


그리고 로그인을 하고 들어가면 아무 것도 안 뜨고 'You don't have permission to edit anything.' 라는 오류 메시지가 나타난다면 urls.py 에서 admin.autodiscover()를 작성해주어야 우리가 생성한 모델이 눈에 보이게 됩니다.


[ urls.py ]




장고의 관리자 페이지입니다. 아까 만들었던 suspecting이라는 앱이 보이고, bob라는 클래스가 보입니다.


bob 옆에 'Add'를 클릭하고 들어가 보면 아까 models.py 에서 생성한 모델(Name, Birthday)을 볼 수가 있습니다. 2개를 추가 해보겠습니다.

Table 'MyDjango.django_admin_log' doesn't exist  오류는 manage.py syncdb 수행.







장고에서는 개발 단계에서 테스트를 해 볼 수 있도록 장고 쉘을 제공합니다. manage.py shell을 치게 되면 장고 쉘을 실행 할 수 있습니다. 장고 쉘에서 우리가 만든 모델을 가져오려면 from "APP이름".models import * 를 실행하면 됩니다. 





모델.objects.all()을 통해 데이터들을 리스트의 형태로 가져 올 수 있습니다. 이 데이터를 조작하려면 원하는 필드에 새로운 값을 넣은 뒤 .save()를 호출하면 모델이 업데이트 됩니다. 또한 모델의 인스턴스를 만들고 값을 넣고 .save()를 호출해도 새로운 데이터를 집어 넣을 수 있고, delete()를 이용해서 데이터를 지울 수도 있습니다.





모델명: 모델명 object 와 같이 알아볼 수는 있지만 가시적이지 않은 것으로 나오는 형태를 바꾸기 위해서는 models.py의 해당 모델에

def __unicode__(self): 와 같은 형태의 함수를 추가 해 주고, 그리고 그 모델을 나타 낼 수 있는 문장을 반환하게 만들면 장고 관리자나 쉘에서 쉽게 모델에 담긴 데이터가 어떤 것인지 알 수 있습니다.




* 모델의 여러 자료형들


- 자주 사용하는 필드를 위주로 알아보도록 하겠습니다.


1. CharField 


- CharField는 문자열을 담을 수 있는 필드입니다. 가장 자주 사용하는 필드 중에 하나죠. 파이썬에서는 문자열에 길이 제한이 없지만 CharField는 문자열의 길이 제한이 있습니다. 만약 길이 제한이 없는 문자열을 담아야 할 일이 있다면 CharField가 아니라 TextField를 사용해야 합니다.


2. TextField


- 긴 문자열을 저장할 수 있는 필드입니다. 신문의 기사나 블로그 포스트, 게시판의 글처럼 길이가 얼마나 늘어날지 모르는 경우 CharField가 아니라 TextField를 사용해야 합니다.


3. IntegerField


- IntegerField는 정수를 담을 수 있는 필드입니다.


4. FloatField


- FloatField는 실수(flot) 를 저장 할 수 있는 자료형입니다.


5. BooleanField


- BooleanField는 참, 거짓을 저장 할 수 있는 자료형입니다.


6. DateField


- DateField는 날짜를 저장 할 수 있습니다. DateField는 몇 가지 옵션을 가지고 있는데, auto_now는 사용자가 값을 입력하지 않아도 자동으로 save()가 호출될 때의 날짜가 들어가게 됩니다. 그리고 auto_now_add라는 옵션은 저장 할 때가 아닌 처음 객체가 생성될 때 시간이 저장되게 됩니다. auto_now나 auto_now_add가 설정되면 자동으로 editable 옵션이 False로 적용됩니다.


7. TimeField


- DateField와 동일하지만 날짜가 아닌 시간을 저장 할 수 있습니다. 역시 auto_now와 auto_now_add를 옵션으로 갖습니다.


8. DateTimeField

- DateField와 TimeField와 같지만 날짜와 시간을 동시에 저장합니다. 역시 auto_now와 auto_now_add 옵션으로 갖습니다.


이 외에도 업로드 된 파일을 저장 할 수 있는 FileField나 URL을 저장 할 수 있는 URLField 이미지를 저장 할 수 있는 ImageField등이 있습니다.



* 모델간의 관계


- ForeignKey


- OneToOneField


- ManyToManyField

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함