我定义了两个模型:
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服务器,再次运行syncdb
,启动服务器:仍然是同样的问题。为什么它不能找到,即使它只是告诉我它创建了id?
答案 0 :(得分:9)
作为未来的提示,请查看South,这是一个非常有用的实用程序,用于将模型更改应用于数据库,而无需在每次更改模型时创建新数据库。 / p>
有了它,您可以轻松地:python manage.py migrate app_name
和South将编写您的模型更改。
documentation非常简单。
答案 1 :(得分:7)
实际上问题是该表从未创建过。由于我是django的新手,我不知道./manage.py syncdb
不会更新现有模型,而只会创建不存在的模型。
因为模型'Server'在我添加其他模型之前就存在了,并且它已经在db中,'syncdb'实际上并没有创建新表。
答案 2 :(得分:4)
我今天遇到同样的问题并修复它。 我想你在教程1中错过了一些命令。 只需遵循:
./python manage.py makemigrations polls
python manage.py sql polls
./python manage.py syncdb
然后修复它并获得表轮询,您可以看到创建的表。
你应该阅读manage.py makemigrations
命令。
答案 3 :(得分:1)
对于django 1.9,这就是我所做的,它解决了这个问题。
python manage.py makemigrations app_name
python manage.py migrate
答案 4 :(得分:0)
第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
最后,runserver。完成