메세지만 읽어도 nullable하지 않은 데에 값을 안 넣었구나 싶은 에러다. 설 연휴 때 장고 책을 보고 따라하다 save(commit=False)를 기억하기 위해 일부러 내 보았다.
참고한 장고 책에서는 not null인 생성일 데이터를 timezone.now()로 직접 입력하게 안내했다. 하지만 나는 책을 따라가는 초반부터 auto_now_add 속성을 사용해 생성일을 자동으로 넣게 만들었으므로 다른 테이터를 가지고 연습했다.
질의응답 게시판의 답변은 반드시 질문을 참조해야 되는 모델을 만들었다. 따라서 답변의 question이 not null이어야 한다.
def answer_create(request, question_id):
question = get_object_or_404(Question, pk=question_id)
if request.method == 'POST':
form = AnswerForm(request.POST)
if form.is_valid():
answer = form.save(commit=False)
answer.question = question
answer.save()
(후략)
답변을 등록하는 answer_create의 코드는 위와 같다. 답변 폼에서 받은 정보를 바로 답변 데이터로 저장하지 않고 commit=False를 통해 저장을 유예했다. 그리고 답변이 참조하는 질문의 객체를 넣은 뒤에 save했다.
이 때 answer.question = question 라인을 주석처리하면 답변이 어느 질문의 답변인지를 넣지 않고 데이터를 저장하려는 셈이니 IntegrityError가 난다.
'Django' 카테고리의 다른 글
DateTimeField를 추가할 때 (0) | 2021.02.28 |
---|---|
DB에 csv로 초기 데이터 넣기 (0) | 2021.02.27 |
TemplateSyntaxError: 'pybo_filter' is not a registered tag library (0) | 2021.02.21 |
백엔드 서버 되어보기 (0) | 2021.02.06 |
Django 회원가입, 로그인 엔드포인트 (0) | 2021.01.30 |