🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

안녕하세요 강사님!

22.04.28 23:56 작성 조회수 236

0

안녕하세요 강사님! 

강의 잘 듣고있습니다. 

다른 분과 동일한 에러가 발생하여 

아래와 같이 코드를 작성하여 오류를 해결했습니다만,

코드의 로직이 맞는지와  다른 방법이 있는지

궁금합니다. (질문 수정해서 올렸습니다! 감사합니다!.)

 

오류 내용

해결 코드

 

def post_new(request):
	if request.method=="POST":
		form = PostForm(request.POST, request.FILES)
		if form.is_valid():
			post = form.save(commit=False)
			post.author = request.user
			post.save()
			post.tag_set.add(*post.extract_tag_list())
			messages.success(request, '포스팅을 저장했습니다.')
			redirect('/')
	else:
		form = PostForm()
	return render(request, 'instargram/post_form.html', {
		'form' : form,
	})

답변 4

·

답변을 작성해보세요.

0

질문이나 문제 접근이 잘 안 되시면, 전체 프로젝트 코드를 공유해주세요.

0

https://www.inflearn.com/questions/456546

위 질문에서도 동일한 답변을 드리고 있습니다.

그리고 뷰 코드 내에서 redirect('/') 만 쓰시면 안 되고 이를 return 하셔야 합니다. return redirect('/') 가 되어야 페이지 이동을 합니다. redirect 함수는 HttpResponse 객체를 만들어주는 유틸리티함수입니다.

0

그 오류 페이지는 상단 오류 메세지 뿐만 아니라, 페이지 전체가 오류에 대한 모든 내역을 담고 있습니다. 단순히 상단 메세지 뿐만 아니라, 하단의 함수호출스택 내역에서 오류가 발생한 지점도 보여주고 있으니, 그에 대한 내역도 같이 보여주시는 것이 좋습니다. // 오류는 정리해서 보여주시되, 필요한 정보는 모두 제공되어야 합니다. 그럼 제가 좀 더 정확하고 좋은 답변을 드릴 수 있습니다. // 그렇지 않다면 저는 상상할 수 밖에 없거든요.

ManyToMany 관계를 저장할려면, 두 모델 인스턴스가 모두 데이터베이스에 저장되어 primary key를 가지는 모델 인스턴스여야 합니다. 관계는 결국 외래키를 저장하는 것인데, pk가 있어야 pk를 참조하는 외래키가 존재할 수 있으니깐요.

아래 오류는 M2M 관계를 저장할려고 하는 데, 해당 Post 모델 인스턴스의 id 값이 None으로서 값이 할당되지 않은 상태라는 오류입니다.

"<Post>" needs to have a value for field "id" before this many-to-many relationship can be used.

Post 모델 클래스에 primary key를 특별히 지정하지 않으셨다면 id 이름의 models.AutoField가 primary key로서 자동 생성이 됩니다.즉 pk가 할당되지 않은 상황이라는 거죠.

보여주신 코드에서는 post.save() 코드가 있지만, 이 오류는 저장되지 않아서 pk가 할당되지 않아서 발생하는 오류입니다. 정확히 post.save() 코드가 실행되고 있는 지 확인해보시구요. 혹시나 소스코드를 수정하고 저장하지 않으셨을 수도 있습니다. 필히 저장하시고 소스코드 편집기의 SAVE 메뉴를 재차 확인해보세요. 혹은 서버를 구동하고 있는 프로젝트 경로와 소스코드 편집기로 열고 있는 프로젝트 경로가 다르거나, 다른 파일을 보고 계신 것일 수도 있습니다.

화이팅입니다. :-)

0

안녕하세요.

어떤 오류가 발생하시나요?

프로그램 구동에는 보여주신 코드 외에 다양한 상황이 존재할 수 있기에,  오류 내역을 알려주셔야 제가 답변을 드릴 수 있습니다. :-)

유형주님의 프로필

유형주

질문자

2022.04.29

질문 수정해서 다시 올렸습니다.

채널톡 아이콘