(venv01) (base) djangoPR % python3 manage.py shell
Python 3.8.8 (default, Apr 13 2021, 12:59:45)
[Clang 10.0.0 ] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
from django.db import connection
cursor = connection.cursor()
cursor.close()
exit()
장고 shell을 열고 connection을 통해서 cursor을 획득 후 진행
python3 manage.py startapp 앱이름

나는 instagram이라는 이름을 가진 앱을 생성했고 INSTALLED_APPS 리스트에 등록을 함

from django.urls import URLPattern
urlpatterns = []
from django.db import models
class Post(models.Model):
message = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
pass
(venv01) (base) djangoPR % python3 manage.py makemigrations instagram
Migrations for 'instagram':
instagram/migrations/0001_initial.py
- Create model Post
(venv01) (base) djangoPR % python3 manage.py migrate instagram
Operations to perform:
Apply all migrations: instagram
Running migrations:
Applying instagram.0001_initial... OK
(venv01) (base) kdjangoPR % python3 manage.py sqlmigrate instagram 0001_initial
CREATE TABLE "instagram_post" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "message" text NOT NULL, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
COMMIT;
DB의 이름은 내가 만든 앱_class 명으로 생성이 되고 이게 디폴트 값임
- blank: validation시에 empty 허용 여부 (디폴트:False)
이 옵션을 생략하게 되면 빈 문자열은 허용하지 않는다는 의미. 따라서 메시지 값이 없다면 model과 연동된 form에서 유효성 검사를 실패하게 된다. form을 사용하지 않고 model만 활용해서 저장하면 유효성 검사를 타지 않고 저장 된다...- null (DB 옵션): null 허용 여부 (디폴트: False)
- validators: validators를 수행할 함수를 다수 지정
모델 필드에 따라 고유한 validators들이 등록 (ex. 이메일만 받기)
1대 1의 관계: OneToOneField
1대 N의 관계: ForeignKey(1에 해당하는 변수)
N대 N의 관계: ManyToManyField