마음만은 한량 햄버거 메뉴
반응형

'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

댓글
위쪽 화살표
로딩바