환경은 Django와 mySQL을 사용하였다
# comment.models
from user.models import Account
...
class Comment(models.Model):
user_id = models.ForeignKey(Account, related_name="comment_user", on_delete=models.CASCADE) # user_id_id
...
이런 식으로 관계를 설정해 주면 된다.
위의 코드에서는 'user_id'라고 컬럼명을 지정 해 주었는데
기본적으로 장고에서 뒤에 '_id'라고 추가하여 저장하기 때문에 그냥 'user'라고 컬럼명을 지정 해주는 것이 이해하기 쉽다.
다음으로 Comment 객체를 DB에 저장하는 views.py를 보면
# request 객체 받기
data = json.loads(request.body)
# 인가 과정에서 request에 저장한 user객체 받기
user = request.user
Comment(
user_id = user,
content = data['content']
).save()
여기서 내가 헷갈렸던 것은, user_id는 Account(즉, user table)의 pk값인 id와 연결되어 있기 떄문에 당연히
user_id = user.id 라고 저장해줘야 된다고 생각했다.
하지만 장고가 준 응답은 TypeError, str 값을 입력해 주란다.
결론은 Comment의 foriegn key 설정시에 그냥 객체를 연결해 주었기 때문에 저장시에도 객체를 넣어주면 자동으로 객체의 pk값이 넘어와서 저장되는 것 같다.
만약, 직접 넣어주고 싶다면 'user_id_id = user.id' 라고 하면 된다.(장고가 바꾼 이름의 컬럼명)