11

2 つのモデルを定義しました。

class Server(models.Model):
    owners = models.ManyToManyField('Person')

class Person(models.Model):
    name = models.CharField(max_length=50)

admin.site.register(Server)
admin.site.register(Person)

その後、楽しみのためにSQLをチェックしました:

BEGIN;
CREATE TABLE "servers_server_owners" (
    "id" integer NOT NULL PRIMARY KEY,
    "server_id" integer NOT NULL,
    "person_id" integer NOT NULL,
    UNIQUE ("server_id", "person_id")
)
;
CREATE TABLE "servers_server" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL,
    "port" integer unsigned NOT NULL,
    "state" integer NOT NULL
)
;
CREATE TABLE "servers_person" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL
)
;
COMMIT;

そこにはこうも書かれていますCREATE TABLE "servers_server_owners"

syncdb新しいモデルをデータベースにインストールするために実行しました。操作するオブジェクトを定義するために管理者インターフェースに移動しましたが、次のエラーが発生しました。

DatabaseError at /admin/servers/server/1/  
no such table: servers_server_owners

私はdev-serverをシャットダウンし、syncdb再度実行し、サーバーを起動しました:それでも同じ問題です。IDを作成したと言っただけなのに、テーブルが見つからないのはなぜですか?

4

5 に答える 5

9

今後のヒントとして、モデルを変更するたびに新しいデータベースを作成することなく、モデルの変更をデータベースに適用するための非常に便利なユーティリティであるSouthを調べてください。

それを使えば簡単に:python manage.py migrate app_nameそして South があなたのモデルの変更を書きます。ドキュメントは非常に簡単です。

于 2012-04-09T21:41:38.830 に答える
7

実際の問題は、テーブルが作成されなかったことです。私はdjangoにかなり慣れていないので、./manage.py syncdb既存のモデルを更新せず、存在しないモデルのみを作成することを知りませんでした。

モデル「サーバー」は他のモデルを追加する前に存在し、すでにデータベースにあったため、「syncdb」は実際には新しいテーブルを作成しませんでした。

于 2012-04-10T11:51:53.683 に答える
4

今日も同じ問題に遭遇し、修正しました。チュートリアル 1 のいくつかのコマンドを見逃していると思います。

./python manage.py makemigrations polls
python manage.py sql polls
./python manage.py syncdb

それを修正してテーブルのポーリングを取得すると、作成されたテーブルを確認できます。コマンドを読む必要がありますmanage.py makemigrations

于 2014-04-20T16:39:00.503 に答える