Django

Django 기초 4주차 1_Sparta Coding Club

끈끈 2023. 4. 5. 12:17

 

4주차에서 배울 것

  • 데이터베이스 간의 관계 파악
  • ORM 모델 수정
  • Django admin 화면에서 나의 모델 확인
  • 팔로잉 / 팔로우 모델 기능 사용

 


 

데이터베이스 관계

 

one-to-many

 

한 개의 글에는 한 명의 사용자

출처 : 스파르타코딩클럽

 

한 명의 사용자는 여러 개의 글을 가지고 있는 것

출처 : 스파르타코딩클럽

 

one-to-one

 

OneToOneField

 

한 명의 사용자는 하나의 프로필 클래스(하나의 정보)만

 

'데이터 A'와 '데이터 B'가 서로 만나서 중복이 되지 않는 값을 만들어 내는 것

 

many-to-many

 

'모델 A'와 '모델 B'가 서로 여러 개의 서로의 모델을 가질 수 있는 것

 

팔로우-팔로잉 관계

 


 

many-to-many 연습하기

 

django-admin startapp restaurant # 터미널에 입력해 앱 생성

 

mySpartaSns/settings.py:

INSTALLED_APPS = [
    'restaurant', # 앱 연결을 위해 추가
]

 

restaurant/models.py도 만들었으면,

 

모델을 데이터베이스에 알려주고 적용시키기

 

python manage.py makemigrations
python manage.py migrate

 

my_pizze / my_topping

 

오른쪽 Database에서 새로운 테이블 확인 가능 (조금 많이 늦게 뜬다)

 

admin에 등록하기

 

restaurant/admin.py:

from django.contrib import admin
from .models import MyPizza, MyTopping # 모델 추가

admin.site.register(MyPizza) # 어드민 페이지에 추가
admin.site.register(MyTopping)

 

python manage.py createsuperuser # 터미널에서 admin 유저 생성

 

더보기
  • "The password is too similar to the username." : 비밀번호가 사용자 이름과 너무 유사하여 보안성이 낮을 경우 발생하는 메시지.
  • "This password is too short. It must contain at least 8 characters." : 비밀번호가 너무 짧아서 보안성이 낮을 경우 발생하는 메시지. 비밀번호는 적어도 8자 이상.
  • "This password is too common." : 널리 사용되는 패스워드를 사용하려고 할 때 발생하는 메시지.
  • "Bypass password validation and create user anyway? [y/N]:" : 비밀번호 보안 규칙을 위반하지만 강제로 사용자를 생성하고자 할 때, 출력되는 메시지.

 

127.0.0.1:8000/admin

 

Add my topping

 

 

SAVE를 눌렀을 때 이런 저장 오류가 난다면

 

데이터베이스와 관련해서 어드민 계정이 잘못된 경우이다

 

일단, 왼쪽 탐색기에서 기존에 있던 db.sqlite3를 오른쪽 클릭해서 delete

 

오른쪽 Database에서 db.sqlite3도 remove

 

 

tweet/migrations와 user/migrations의 0001, 0002 파일과 restaurant/migrations의 0001도 지워준다

 

유저 모델 테이블을 우리가 만든 유저 테이블로 바꾸면서 관리자와 관련된 정보들이 제대로 세팅되어 있지 않은 상태.

 

전부 삭제 완료했다면 다시 터미널에 아래 입력

 

python manage.py makemigrations # tweet, user 모델 등 재생성
python manage.py migrate
python manage.py createsuperuser

 

db.sqlite3 데이터베이스로 드래그

 

topping / pizza

 

이제는 피자와 토핑 모두 잘 추가되는 것을 볼 수 있다