이번에 장고 기초 이해도 테스트를 보았는데 정답이 아쉬웠던 질문들을 오답 노트를 통해 다시 복습해 보았다.
settings.py 파일의 주요 역할: settings.py 파일은 Django 프로젝트의 전반적인 설정을 관리하는 곳이다. 이 파일은 프로젝트의 환경 구성, 데이터베이스 설정, 타임존, 언어 설정, 미디어 및 정적 파일 경로, 어플리케이션 설치 여부 등을 포함한다. 그래서 settings.py는 Django 프로젝트의 핵심적인 설정 파일로, 프로젝트의 환경에 맞게 설정을 변경할 수 있도록 도와준다.
Django ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스 간의 데이터를 매핑해주는 도구다. 개발자는 SQL 쿼리를 직접 작성하지 않고, Python 객체로 데이터베이스 작업을 수행할 수 있다. ORM을 사용하면 코드가 더 직관적이며 데이터베이스 작업이 쉽게 유지 및 관리된다. 예를 들어, 데이터를 삽입, 수정, 삭제하는 작업을 간단한 메서드 호출로 처리할 수 있다.
Django에서 ManyToManyField는 두 모델 간의 다대다 관계를 정의하는 데 사용된다. 예를 들어, 블로그 포스트와 태그 시스템을 생각할 수 있다. 하나의 포스트는 여러 태그를 가질 수 있고, 하나의 태그는 여러 포스트에 속할 수 있다. 이 경우 Post 모델과 Tag 모델 간의 관계를 ManyToManyField로 정의할 수 있다.
다음 코드는 Post 모델에 대한 Update(수정) 작업을 처리하는 부분이다. 빈 칸을 채워 코드를 완성하시오.
def post_update(request, post_id):
post = ( )
if ( ):
form = PostForm( )
if form.is_valid():
( )
return redirect('post_list')
else:
form = PostForm( )
return render(request, 'posts/form.html', {'form': form})
정답
def post_update(request, post_id):
post = get_object_or_404(Post, id=post_id) # 해당 Post를 가져옴
if request.method == 'POST': # POST 요청인 경우
form = PostForm(request.POST, instance=post) # 기존 Post 객체에 입력된 데이터로 업데이트
if form.is_valid():
form.save() # 변경사항 저장
return redirect('post_list') # 리스트 페이지로 리다이렉트
else:
form = PostForm(instance=post) # GET 요청인 경우, 기존 데이터를 폼에 채워줌
return render(request, 'posts/form.html', {'form': form}) # 템플릿에 폼 전달
위 코드는 post_update 뷰에서 사용자가 특정 게시글을 수정할 수 있도록 처리하는 코드다. get_object_or_404 함수로 수정할 게시글을 가져온 후, POST 요청 시 폼 데이터를 받아 유효성을 검증한 후 저장한다.