from django.db import models
class Article(models.Model):
pass
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
각각의 필드는 테이블의 컬럼임.
다양한 필드들
근데 이제 자주 수정되어야 하는것들. 생성일과 수정일 같은 친구들은
auto_now_add=True & auto_now=True 사용하면 됨.

이렇게
Model 변경사항을 마이그레이션으로 생성해준다
python manage.py makemigrations
DB에 적용시키기위해 생성한 마이그레이션을 반영시켜준다
python manage.py migrate
python manage.py showmigration
python manage.py sqlmigrate <app_name> <migration_no>

1번 선택 후 Enter치기
(기본값으로 Model을 변경한 지금 시간을 계산해서 넣어달라는거임)
SQL안쓰고 Python으로 DB조작을 가능하게 해줌
객체 지향 언어(캡슐화)와 DB의 개념적인 간극을 줄여준 것.
Model 클래스를 생성하면 Django는 자동적으로 CRUD 할 수 있는 Database API를 제공함.
그리고 집사를 하나 붙여주는데, 그게 Manager임.
(풀 네임 Django ORM Manager)
하는 일은 우리가 작성한 Model 클래스를 이용하여 데이터 베이스 쿼리작업을 도와주는 역할을 함
우리는 Manager를 이용해서 Django ORM의 Queryset API를 사용하게 될 것임.
*Queryset == ORM을 사용해서 데이터베이스로부터 전달받은 객체.
이 매니저의 기본(default)이름은 objects임
python manage.py shell
pip install django-extensions
pip install ipython
"django_extensions",
pip freeze > requirements.txt
python manage.py shell_plus
__str__Article Object이라고 써져있던 것 보다, 어떤 내용인지 훨씬 보기 쉬워짐
class Article(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
조회 결과는 Queryset으로 반복가능한 객체 형태임
Article.objects.all()
article = Article()
article.title = 'first_title'
article.content = 'my_content'
# 여기에서 전체 Article을 조회해보면
Article.objects.all() # 비어있다
# save()하기전에는 저장되지 않음
article.save()
# 다시 전체 Article을 조회해보면 하나의 아티클이 있음
Article.objects.all()
# 속성 하나씩 접근
# 제목
article.title
# 내용
article.content
# 생성일시
article.create_at
# pk(id)
article.id
Article.objects.create(title='third title', content='마지막 방법임')
# save()가 필요하지 않음
Article.objects.get(id=1)
get을 쓰는데 괄호 안에 2개 이상 올 수 있는 조건을 쓰면 예외 발생함. 이를 위해 있는게 filter.
Article.objects.filter(content='my_content')
다양한 lookup들..
*lookup: 조건에 사용되는 매개변수를 lookup 이라고 함
일치하지 않는다면 빈 쿼리셋을 리턴함
변수에 특정시키고, 변경하고, 저장
article = Article.objects.get(id=1)
article.title = 'updated title'
article.save()
변수에 특정시키고, 삭제
article = Article.objects.get(id=2)
article.delete()