레코드 등록 방법에 대해서

미해결질문
junhy222 프로필

강의에서 아래처럼 두가지 방법이 소개되어있는데 차이점이 있으면 알려주세요

1)post = Post.objects.create(title='this is title', content='this is content')

post.save()

2)Restaurant(name=’Deli Shop’, address=’Gangnam’).save()

박순영 프로필
박순영 3달 전

1번과 2번 둘 다 동일한 역할을 하지만 1번의 경우 

Post.objects.create(title='this is title', content='this is content')

이 코드가 실행되는 시점에 모델의 인스턴스 생성 뿐만 아니라 데이터베이스의 저장까지 이루어집니다.

이후 post란 인스턴스의 값을 아래의 예시처럼 수정했을 경우 

    post.content = 'modified'

다음으로 post.save()를 실행시키면 수정된 값이 데이터베이스에 반영됩니다. 

2번의 경우에는 

Restaurant(name=’Deli Shop’, address=’Gangnam’)

이 코드가 실행되면 모델의 인스턴스까지만 생성되고 데이터베이스로의 실제 저장은 이루어지지 않는데요.

단순히 인스턴스를 초기화하기 위한 생성자로 보시면 되고

이렇게 생성된 인스턴스에 save()를 호출해주어야 실제 데이터가 저장된다는 차이점이 있습니다.

2번은 아래와 같이 2줄로도 풀어서 작성할 수 있습니다.

restaurant = Restaurant(name=’Deli Shop’, address=’Gangnam’)

restaurant.save()

종합하면 create()를 사용하면 기존의 2번과 같은 생성자 호출과 동시에 save() 함수의 역할도 같이 수행한다고 보시면 됩니다.

지식공유자 되기
많은 사람들에게 배움의 기회를 주고,
경제적 보상을 받아보세요.
지식공유참여
기업 교육을 위한 인프런
“인프런 비즈니스” 를 통해 모든 팀원이 인프런의 강의들을
자유롭게 학습하는 환경을 제공하세요.
인프런 비즈니스