2008-11-16 3 views
5

나는 내가 원인을 모르겠습니다 오류가 있어요 여기 "알 수없는 열 'user_id를'오류가

오류이다.

Exception Type:  OperationalError 
Exception Value:  
(1054, "Unknown column 'user_id' in 'field list'") 

사람이 나는 이유를 알고 있나요 ?이 오류를 얻는 것은 나는 그것을 알아낼 수 없습니다 모든 것이 잘 될 것 같다

내보기 코드는 다음과 같습니다 :..

if "login" in request.session: 
    t = request.POST.get('title', '') 
    d = request.POST.get('description', '') 
    fid = request.session["login"] 
    fuser = User.objects.get(id=fid) 
    i = Idea(user=fuser, title=t, description=d, num_votes=1) 
    i.save() 
    return HttpResponse("true", mimetype="text/plain") 
else: 
    return HttpResponse("false", mimetype="text/plain") 

내가 안목 어떤 도움을 줘라! 감사!

편집 : 또한 측면 질문. 기본 키를 사용하는 경우 모델에서 id 필드 또는 인덱스를 선언해야합니까?

편집 : 관련 모델은 다음과 같습니다 (예 : id = 또는 objects.get (pk =? :?

class User (models.Model): 
    first_name = models.CharField(max_length=200) 
    last_name = models.CharField(max_length=200) 
    email = models.CharField(max_length=200) 
    password = models.CharField(max_length=200) 

class Idea (models.Model): 
    user = models.ForeignKey(User) 
    title = models.CharField(max_length=200) 
    description = models.CharField(max_length=255) 
    num_votes = models.IntegerField() 

답변

4

당신이 진짜 도움을받을 모델을 표시 할 것이다, 그러나 당신의 아이디어 테이블이 USER_ID 컬럼이없는 사용자가 SQL 테이블 구조를 수정처럼 보이는

+0

SQL 테이블 구조를 건드리지 않았습니다. 내 모델을 질문에 추가하여 보여주었습니다. syncdb를 여러 번 실행했습니다. – rksprst

+2

syncdb는 테이블 구조를 변경하지 않으며 존재하지 않는 테이블 만 만들 수 있습니다. 따라서 모델을 변경하면 이전 테이블이 남아 있으므로 테이블을 삭제하고 다시 만들거나 수동으로 테이블을 다시 작성해야합니다. – che

+0

굉장 !! 고맙습니다. 나는 모든 테이블을 떨어 뜨 렸는데 잘 돌아갔다. – rksprst

5
  1. user_id 필드는 Idea에서 User까지의 FK 참조입니다. 모델을 변경하고 데이터베이스를 업데이트하지 않았다면 이러한 종류의 문제가 발생할 것입니다.

    이전 테이블을 삭제하고 syncdb를 다시 실행하십시오.

  2. 모델 테이블의 기본값은 id입니다. 검색어에 id라고 부를 수 있습니다. 동의어 인 pk을 사용할 수도 있습니다.

    자신의 기본 키 필드를 정의하면 자동 id 필드가 표시되지 않습니다. 그러나 여전히 pk을 사용하여 기본 키를 참조 할 수 있습니다.

+1

"pk"는 ID의 동의어가 아니며 기본 키 열을 지정합니다 (이름을 다르게 지정할 수도 있음). 기본 키 열의 정확한 이름을 모르는 경우 (또는 원하지 않는 경우) 매우 편리합니다. – zgoda

+0

http://docs.djangoproject.com/en/dev/topics/db/queries/#the-pk-lookup-shortcut. PK는 모델에서 정의한 PK 또는 기본 PK 중 하나 인 ID를 나타내는 PK를 의미합니다. –

0

네, 테이블을 떨어 뜨 렸습니다. 그러나 실제로 데이터베이스에 들어가 DROP해야합니다. "manage.py flush"또는 "manage.py reset appname"은 자체적으로하지 않습니다.

-Nick

관련 문제