7. Django Admin - 모델 등록하기

data_hamster·2023년 4월 25일
0

학습주제
Admin에서 모델 등록하기

학습내용
장고는 admin에서 유저에 대한 CRUD 편의성을 제공한다.
장고는 또한 모델에 대해서도 CRUD 적용이 가능함.
장고에게 question과 choice를 다뤄달라고 하면 된다.

admin.py에 우리의 모델을 등록해주면 된다.
admin.site.register(Question)을 해주면 된다. 그러나 여기까지 썼을 때, Question에 경고 밑줄이 뜬다.

정의되지 않았다고 하는데, question 모델을 import 해주면 된다.

import * 해줘도 된다.

브라우저로 이동해, 새로고침을 해주면,

POLLS에 Questions가 뜬 것을 볼 수 있다.

Choice도 등록해준다.



ADD QUESTION을 누르면
필드에 맞는 입력값을 입력할 수 있다.



지금 Question object (1) (2) 순이라 안에 뭐가 들어있는지 잘 모르는 상황. (1) (2)는 아마 id가 들어가 있는것 같음. 테이블을 만들면 자동으로 id 칼럼이 생기기 때문.
Question이 표현될 때 문자열로 어떻게 표현될지 정의해주면 좀 더 직관적으로 만들 수 있다.

모델의 문자열 표현 방식은 def __str__(self):로 정의한다. return self.question_text 출력할 때 퀘스쳔 텍스트를 대표로 출력해라 라고 하면 된다.


이렇게 question text가 바로 모델을 나타내는 것을 알 수 있다.

만일 뒤에 날짜까지 넣고 싶으면 다음과 같이 짜면 된다.
return f'제목: {self.question_text}, 날짜: {self.pub_date}


뒤에 날짜도 정상적으로 뜨는 것을 확인할 수 있다.

장고 어드민을 살펴본 김에 다른 폼도 확인해보려 한다.

FlaotField 추가

score = models.FloatField(default=0)

저장을 하고 웹사이트 새로고침을 하니 다음과 같은 오류가 난다.

이러한 컬럼이 없다고 하는 것으로 보아, 마이그레이션을 통한 마이그레이트가 되지 않아 테이블이 없다고 인식하는 것 같다.

BooleanField 추가

도큐먼트에 체크박스로 구현된다는 것으로 보아 어드민에서 체크박스로 체크하게 되어 있는 것같다.
is_something_wrong = models.BooleanField(default=False) 로 구현

JSONField 추가

json_field = models.JSONField(default=dict)

서버가 돌아가는 중에도 마이그레이션이 가능하므로, 서버는 그대로 돌린다. 서버는 vs code에서 돌리고 터미널에서 마이그레이션 진행.

python manage.py makemigrations
python manage.py migrate


마이그레이션, 마이그레이트 성공.

Add question을 들어가니, FloatField의 score와 BooleanField의 is_something_wrong, JSONField의 json_field가 생성되어 있다. 각 제목을 따로 설정해주지 않아도, 언더바는 띄어쓰기, 맨 앞은 대문자로 표현되어 있다.

불필요한 필드들을 추가했으므로, 이제 불필요한 필드들을 제거하고 예전으로 돌아가는 작업을 복습해본다.

python manage.py migrate polls 0002

  • migtations 폴더의 0003~이하 파일을 제거
  • 모델에 구현된 필드도 제거.


    DB에서 지운걸 모델에선 안지웠기 때문에 불일치로 오류가 남. 마이그레이션을 취소했기 때문

DB - 모델이 일치해야함.

profile
반갑습니다 햄스터 좋아합니다

0개의 댓글