🤍 전 강의 25% 할인 중 🤍

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

  • 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

column이 없다는 에러가 발생합니다 !

22.02.28 06:13 작성 조회수 231

0

안녕하세요? 강의 8분 즈음, 강사님께서 글을 작성하시면서 save를 하시는데 저는 에러가 떠서 질문을 드립니다.

 

아래의 화면에서 

이 화면에서 save를 하려하면 다음과 같이 에러가 발생하는데요

 

읽어보니까 message라는 column이 없다는 것 같은데

모델쪽을 살펴봐도 틀린부분이 어디인지를 잘모르겠어서 질문드립니다.

from django.db import models

# Create your models here.
class Post(models.Model):
    message = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now = True)

이렇게 모델쪽에서는 message라는 column이 있는 것 같은데 말이죠 ㅠㅠ

 

아 그리고 /admin /에서도 instagram밑의 posts를 누를 경우 강사님과 다르게 에러가 발생하더군요 ㅠㅠ

 

혹시 장고의 버전이 달라서 그런걸까요? 저는 현재 4.02버전이 설치되어 있습니다. 

추가로, 강사님의 버전에 맞춰서 3.2버전을 설치해서 사용해야 하나요?

답변 1

답변을 작성해보세요.

1

안녕하세요.

본 이슈는 장고 버전과는 무관합니다.

장고에서 모델 클래스 필드내역과 데이터베이스 테이블 내역은 일치해야 합니다. 모델 필드 내역과 데이터베이스 테이블 내역을 일치하도록 도와주는 장고의 기능이 장고의 마이그레이션 기능입니다. 마이그레이션 기능에 대해서는 이후 에피소드인 "마이그레이션을 통한 데이터베이스 스키마 관리 (1)(2)" 에서 소개해드리고 있습니다. 모델 내역과 데이터베이스 테이블 내역이 일치하지 않을 경우, 보여주신 OpertionalError가 발생합니다.

"table instagram_post has no column named message" 에러 메세지는

  • 데이터베이스 테이블 instagram_post : 이는 instagram 앱의 Post 모델에 매핑되는 테이블입니다.
  • instagram_post 모델에 message 이름의 컬럼이 없다는 오류입니다. Post 모델 클래스에는 message 컬럼이 정의가 되어있는 데 말이죠.

Post 모델은 "장고 모델 (ORM) 소개" 에피소드의 13:30 시점에서

  1. 먼저 Post 모델 클래스를 정의하면서 message, created_at, updated_at 필드를 정의하고, 필히 파일을 저장합니다.
  2. makemigrations/migrate 명령을 통해 마이그레이션을 수행하여, Post 모델 내역대로 데이터베이스 테이블을 생성합니다.

혹시 Post 모델에서 message 필드 정의를 누락하고 makemigrations/migrate 명령 수행하신 후에 뒤늦게 Post 모델 코드에 message 필드만 추가하시진 않았나요? 만약 그렇다면 Post 모델 클래스 코드에는 message 필드 정의가 있지만, 데이터베이스에는 message 필드가 없어서 본 오류가 발생하는 것입니다.

현재 instagram/migrations/ 내의 파일 내역과 0001_initia.py 파일 내용을 보여주실 수 있으실까요?

마이그레이션 기능은 처음에는 어렵습니다. 일단 다음 절차대로 데이터베이스를 날리시고, 새롭게 데이터베이스 데이터를 생성하는 쪽으로 임시대응을 해보시고, 이후 마이그레이션 기능을 차근차근 학습해보시며 이해도를 올려보시길 권해드립니다.

  1. 현재 구동 중인 장고 개발서버를 중지시킵니다. 개발 서버를 구동하고 있는 터미널에서 Ctrl-C 를 입력하시면 됩니다. 1회 입력으로 명령이 먹지 않으면 여러 번 Ctrl-C 를 입력해보셔도 좋습니다.
  2. 프로젝트 루트의 db.sqlite3 파일을 삭제합니다. 현재 장고 프로젝트의 데이터베이스 파일입니다. 이전에 생성한 슈퍼 유저 계정을 포함한 모든 데이터베이스 데이터가 삭제됩니다.
  3. instagram/migrations/0001_initial.py 파일을 삭제합니다.
  4. python manage.py migrate 명령으로 기본 데이터베이스 테이블을 생성하고, python manage.py createsuperuser 명령으로 슈퍼유저 계정을 하나 생성합니다.
  5. instagram/models.py 파일에 Post 모델 필드 내역에 message, created_at, updated_at 필드 내역을 정확히 확인하시고, Ctrl-S 를 눌러 꼭 파일 저장을 확인해주세요. 저장되지 않은 코드는 프로그램 동작에 반영되지 않습니다. File 메뉴의 save all 메뉴를 눌러보시는 것도 좋습니다.
  6. 이제 python manage.py makemigrations instagram 명령으로 instagram/migrations/0001_initial.py 파일을 생성해주시고, python manage.py migrate instagram 명령으로 데이터베이스 테이블을 생성해줍니다.
  7. 이제 http://127.0.0.1:8000/admin/ 으로 접속하시어 admin 인터페이스를 통해 Post 데이터를 생성해보세요.

그리고, 질문 제목에는 본 질문을 요약해서 써주시면, 다른 분들에게도 본 질문이 도움이 될 수 있습니다. 부탁드리겠습니다.

화이팅입니다. :-)

 

채널톡 아이콘