[210722 TIL] Django

Choi Rim·2021년 7월 22일
0

Django

목록 보기
10/21
post-thumbnail

class Owner(models.Model)에서 Model을 상속받는 이유

  • 장고에서 models라는 모듈 안에 Model이라는 class를 제공한다.
  • 장고에서 제공하는 Model class를 상속해서 class를 만들면 쉽게 테이블을 만들수 있고, 쉽게 ORM을 사용할 수 있게 해준다.

all()

all() -> Query Set 모양으로 담김

  • Query Set은 리스트의 성질이 있어서 for문 사용 가능

역참조

  • owner.dog_set.all()
    • _set
    • 역참조

정참조와 역참조

  • a 테이블에서 참조하고 있는 b 테이블의 정보를 가져오는 것은 정참조이다.
  • b 테이블에서 참조당하고 있는 a 테이블의 정보를 가져오는 것은 역참조이다.

Json.loads를 하는 이유

request message의 body에 담겨있는 데이터는 처음 들어왔을 때 json 형태로 되어있다. 그래서 파이썬에서 사용할 수 없기때문에 파이썬이 읽을 수 있는 정보로 바꿔야 한다. ( dic 등)

ManyToManyField

class Actor(models.Model):
    movies = models.ManyToManyField('movie.Movie',
    through= ActorMovie)

    class Meta:
        db_table = "actors"
  • ManyToManyField는 through속성을 사용해서 중간 테이블의 인스턴스들을 읽어올 수 있다.
  • movies 속성은 ActorMovie 클래스를 통해 Movie 클래스를 참조한다.

ManyToManyField 사용 시 이점

  • ManyToManyField 없이 Foreign Key로만 이루어진 중간테이블을 선언하여 M2M를 구현할 수도 있다.
  • 중간 테이블을 선언할 수도 있는데 왜 ManyToManyField를 사용할까?
    In [10]: actor.movies.all()
    Out[10]: <QuerySet [<Movie: Movie object (1)>, <Movie: Movie object (2)>, <Movie: Movie object (3)>, <Movie: Movie object (4)>, <Movie: Movie object (5)>, <Movie: Movie object (6)>, <Movie: Movie object (7)>, <Movie: Movie object (8)>, <Movie: Movie object (9)>, <Movie: Movie object (10)>]>
    
  • ForeignKey를 사용하여 접근하면 중간 테이블을 거쳐서 데이터를 가져와야 하지만 ManyToManyField를 사용하면 중간 테이블을 거치지 않고 데이터를 가져올 수 있다.
  • 다대다 관계 테이블에서는 ManyToManyField를 사용하면 훨씬 코드의 가독성이 좋아진다.

through 속성

  • through 속성을 쓰지 않으면 django가 자동으로 중간 테이블을 생성해준다.
  • through 속성은 중간 테이블로 쓸 테이블을 결정하는 것이 through 속성이다.
  • 역참조할 때 호출하는 column이름을 무엇으로 할 지 정하는 것이다.
class Dog(models.Model):
	owner = models.ForeignKey('owner.Owner',
    on_delete=models.CASCADE, related_name="dogs")
owner.dogs.all()
  • 역참조 관계에 있을 때 쓰는 속성이다. 나를 참조하고 있는 객체를 불러올 때 _set을 통해서 불러올 수 있었는데, related_name을 써서 owner.dog을 통해 데이터를 불러올 수 있다.

Django ORM이란

Object Relational Mapping

  • 객체 관계 매핑
  • 객체와 관계형 데이터베이스를 매핑해주는 개념
  • 원래 관계형 데이터베이스를 사용하기 위해서는 SQL을 사용해야 했다.
    • ORM은 이러한 불편함을 해소해준다.
    • 작성한 파이썬 코드를 관계형 데이터베이스의 SQL 쿼리로 자동 변환 시켜서 개발자가 따로 SQL 쿼리를 작성할 필요 없어 파이썬 코드 작성만으로 데이터베이스를 조작 할 수 있게 해준다.

git branch merge

git branch가 main으로 merge 된 다음 git pull origin main 을 통해 git의 main과 local main을 연동해야 한다. 안해주면 push한 파일들 보이지 않음!

<참고>

profile
https://rimi0108.github.io/

0개의 댓글