2012-03-11 5 views
0

シェル追加した後、私は私のmyappのフォルダ内にテーブルを作成し、シェルからエラー.SAVEを使用して()Pythonで多対多の関係は当初から

のpython manage.pyのSQL myappの

を走りましたその後、私はその後、データベースを同期してPythonシェルを実行し始めた期待される出力>

BEGIN; 
CREATE TABLE "myapp_dude" ( 
    "id" integer NOT NULL PRIMARY KEY, 
    "name" varchar(128) NOT NULL 
) 
; 
CREATE TABLE "myapp_group_members" ( 
    "id" integer NOT NULL PRIMARY KEY, 
    "group_id" integer NOT NULL, 
    "dude_id" integer NOT NULL REFERENCES "myapp_dude" ("id"), 
    UNIQUE ("group_id", "dude_id") 
) 
; 
CREATE TABLE "myapp_group" ( 
    "id" integer NOT NULL PRIMARY KEY, 
    "name" varchar(128) NOT NULL 
) 
; 
CREATE TABLE "myapp_membership" ( 
    "id" integer NOT NULL PRIMARY KEY, 
    "dude_id" integer NOT NULL REFERENCES "myapp_dude" ("id"), 
    "group_id" integer NOT NULL REFERENCES "myapp_group" ("id"), 
    "date_joined" date NOT NULL, 
    "invite_reason" varchar(64) NOT NULL 
) 
; 
COMMIT; 

を生成

。それは私のテーブルにすべての引数を受け入れ、適切に名前/グループを追加する、メンバーシップが動作しますが、私は単にそれを保存しようとすると、私は次のエラーが発生します。

>>> from myapp.models import Membership, Group, Dude 
>>> from datetime import date 
>>> ringo = Dude.objects.create(name="Ringo Starr") 
>>> paul = Dude.objects.create(name="Paul McCartney") 
>>> beatles = Group.objects.create(name="The Beatles") 
>>> m1 = Membership(dude=ringo, group=beatles, 
...  date_joined=date(1962, 8, 16), 
...  invite_reason="Needed a new drummer.") 
>>> m1.save() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\django\db\models\base.py", line 460, in sa 
ve 
    self.save_base(using=using, force_insert=force_insert, force_update=force_up 
date) 
    File "C:\Python27\lib\site-packages\django\db\models\base.py", line 553, in sa 
ve_base 
    result = manager._insert(values, return_id=update_pk, using=using) 
    File "C:\Python27\lib\site-packages\django\db\models\manager.py", line 195, in 
_insert 
    return insert_query(self.model, values, **kwargs) 
    File "C:\Python27\lib\site-packages\django\db\models\query.py", line 1436, in 
insert_query 
    return query.get_compiler(using=using).execute_sql(return_id) 
    File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 79 
1, in execute_sql 
    cursor = super(SQLInsertCompiler, self).execute_sql(None) 
    File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py", line 73 
5, in execute_sql 
    cursor.execute(sql, params) 
    File "C:\Python27\lib\site-packages\django\db\backends\util.py", line 34, in e 
xecute 
    return self.cursor.execute(sql, params) 
    File "C:\Python27\lib\site-packages\django\db\backends\sqlite3\base.py", line 
234, in execute 
    return Database.Cursor.execute(self, query, params) 
DatabaseError: table myapp_membership has no column named dude_id 

私は完全に、あなたが見ることができるので、このとのループのために投げていたテーブルが作成されたときに、作成した「dude_id」の欄がありますが、エラーメッセージの下部にある、それはそれと言います1つはありません。また、私は男に追加して、メンバーシップテーブルにうまく追加することができますが、保存できないという事実はあまり意味がありません。私はこのウェブサイト、Googleを通ってきましたが、あなたはそれに名前を付けましたが、私はこの解決策を考え出すことができませんでした..どんな洞察も大いに評価されるでしょう!

+0

この質問の文脈がどのようなものかを明確にしてください。タグにdjangoを追加します。 – aquavitae

答えて

0

エラーはかなり自明です。あなたのSQLスキーマは、djangoで定義されているものとは異なります。試してみてください

python manage.py reset myapp 
+0

ああ、私のせいです!私はこれに慣れていないし、 "リセット"オプションがあることを知らなかった。ありがとうございました! – crenfro

+0

少なくとも+1を入れて、この質問に回答してください。 – aabele

1

あなたのデータベースはdude_idであると確信できますか?これは、すでに存在する場合、syncdbがテーブルを再作成しないために発生する可能性があります。