11

我定义了两个模型:

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

我关闭了开发服务器,syncdb再次运行,启动服务器:仍然是同样的问题。为什么它找不到表,即使它只是告诉我它创建了 id?

4

5 回答 5

9

作为未来的提示,请查看South,这是一个非常有用的实用程序,可以将模型更改应用到数据库,而无需在每次更改模型时都创建新数据库。

有了它,您可以轻松:python manage.py migrate app_nameSouth 将编写您的模型更改。文档非常简单。

于 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 回答
2

对于 django 1.9,这就是我所做的,它解决了这个问题。

python manage.py makemigrations app_name

python manage.py 迁移

于 2017-02-09T07:58:30.463 回答
0
  1. 使用“manage.py help”检查命令
  2. 如果你找到了 migrate 和 makemigration,这意味着你的 python 已经更新了

第1步:

python manage.py makemigration

结果1:

Migrations for 'mainsite':
mainsite\migrations\0001_initial.py
- Create model Post

第2步:

python manage.py migrate

结果2:

Operations to perform:
Apply all migrations: admin, auth, contenttypes, mainsite, sessions
Running migrations:
Applying mainsite.0001_initial... OK

最后,运行服务器。完毕

于 2017-05-28T07:20:20.393 回答