2011-09-16 11 views
0

私はDjangoのガイドを介して頼りなさそう初心者だし、それはmodels.pyでこれを置くために私に言った:Djangoモデルを使用して結合テーブルを作成するにはどうすればよいですか?

CREATE TABLE "bookmarks_tag_bookmarks" (
    "id" integer NOT NULL PRIMARY KEY, 
    "tag_id" integer NOT NULL REFERENCES "bookmarks_tag" ("id"), 
    "bookmark_id" integer NOT NULL REFERENCES "bookmarks_bookmark" ("id"), 
    UNIQUE ("tag_id", "bookmark_id") 
); 

しかし:

class Bookmark(models.Model): 
    title = models.CharField(max_length=200) 
    user = models.ForeignKey(User) 
    link = models.ForeignKey(Link) 

class Tag(models.Model): 
    name = models.CharField(max_length=64, unique=True) 
    bookmarks = models.ManyToManyField(Bookmark) 

これは、このSQLでテーブルに参加すべきです私はmanage.py sqlブックマークを実行し、代わりにこのSQLを取得します。

CREATE TABLE "bookmarks_tag_bookmarks" (
    "id" integer NOT NULL PRIMARY KEY, 
    "tag_id" integer NOT NULL, 
    "bookmark_id" integer NOT NULL REFERENCES "bookmarks_bookmark" ("id"), 
    UNIQUE ("tag_id", "bookmark_id") 
); 

ジョインテーブルはタグテーブルを参照しません。誰も私に何が間違っているか説明してもらえますか?

答えて

1

./manage.py sqlの出力をさらに見てください。

ALTER TABLE "bookmarks_tag_bookmarks" ADD CONSTRAINT "tag_id_refs_id_somehash" FOREIGN KEY ("tag_id") REFERENCES "bookmarks_bookmark" ("id") DEFERRABLE INITIALLY DEFERRED; 
+0

まあ、私はそういうものは得られません。 bookmarks_tag_bookmarksテーブルについて言及したのは、私が掲載したSQLだけです。 – pennydrops

+0

あなたはそれが間違ったことをしたことは決してありませんでした。それは非常に居心地の良い部屋です。操作の順序はタグテーブルが存在する必要があり、SQLジェネレータは後で制約を追加するように両方のテーブルの前に結合テーブルを作成しています。これを完全に確認するには、syncdbを実行してからdbに入り、スキーマをチェックしてください。 – John

+0

ああ、完璧な意味があります。 SQL出力は、結合テーブルがタグテーブルの前に作成されていることを示しています。だから、データベースは正しいかもしれませんが、私に見せてくれるSQLの出力は誤解を招きますか? – pennydrops

関連する問題