[IntegrityError, Not NULL constraint failed]
반응형
'IntegrityError, Not NULL constraint failed'
문제 해결하기
에러 발생 상황
- 로그인 후, User 별로 글 작성 기능을 넣기 위해 post_new
메서드를 구현한 상태 - user 모델을 Post 모델의 Foreign Key로 설정해놓은 상태
문제 발생 이유
- user 모델을 Foreign Key로 참조하며 Post 모델의
테이블에 user_id라는 컬럼이 자동 생성된다. - DB를 보면 user_id 컬럼이 NOT NULL로 되어있음을
확인할 수 있다. - user_id가 NULL이 되지 않도록 user_id를 넘겨주면
해결될 것이다.
문제 해결 방안
1. 데이터가 DB에 바로 저장되지 않도록 한다.
- commit = False
- 위의 옵션을 이용해 모델 클래스로 생성한 인스턴스 객체만
반영하고, DB에는 반영하지 않는다.
post = form.save(commit=False)
2. post 객체에 user 정보를 기입한다.
- post 객체에 user_id가 포함된 이용자의 user 정보를 넣는다.
post.user = request.user
3. 이제 DB에 반영한다.
post.save()
# 예시소스
def post_new(request):
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
return redirect('post/post_list.html')
else:
form = PostForm()
return render(request, 'post/post_form.html', {
'form': form
})
반응형
블로그카우, 티스토리 애드센스 강의
웹 개발자가 알려주는 수익형 블로그 고속 성장 A to Z
댓글