Django - DatabaseError:没有这样的表

var*_*esa 11 python database django django-models

我定义了两个模型:

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)
Run Code Online (Sandbox Code Playgroud)

之后我甚至检查了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;
Run Code Online (Sandbox Code Playgroud)

它甚至说 CREATE TABLE "servers_server_owners"

我跑去syncdb安装新模型到数据库.我去管理界面定义了一些要玩的对象,但是我收到了以下错误:

DatabaseError at /admin/servers/server/1/  
no such table: servers_server_owners
Run Code Online (Sandbox Code Playgroud)

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

dro*_*oon 9

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

有了它,您可以轻松地:python manage.py migrate app_name南方将编写您的模型更改.该文档是非常简单的.


var*_*esa 7

实际上问题是表永远不会被创建.由于我是django的新手,我不知道./manage.py syncdb它不会更新现有的模型,只会创建不存在的模型.

因为模型"服务器"在添加其他模型之前就存在了,并且它已经在数据库中,所以"syncdb"实际上并没有创建新表.