我在Django中设置了如下模型。
class Pupil(models.Model):
forename = models.CharField(max_length=30)
surname = models.CharField(max_length=30)
dateofbirth = models.DateField()
year = models.IntegerField()
class_group = models.CharField(max_length=30)
email = models.EmailField(blank=True)
assignments = models.ManyToManyField('Assignment', verbose_name='related assignments')
def __unicode__(self):
return u'%s %s' % (self.forename, self.surname)
class Subject(models.Model):
name = models.CharField(max_length=30)
level = models.CharField(max_length=30)
teachers = models.ManyToManyField('Teacher', verbose_name='related teachers')
def __unicode__(self):
return self.name
class Teacher(models.Model):
forename = models.CharField(max_length=30)
surname = models.CharField(max_length=30)
email = models.EmailField(blank=True)
def __unicode__(self):
return u'%s %s' % (self.forename, self.surname)
class Assignment(models.Model):
assignment_name = models.CharField(max_length=30)
date_assigned = models.DateField()
date_submitted = models.DateField()
def __unicode__(self):
return self.assignment_name
当我尝试在管理员中添加学生并将分配附加到该学生时,我得到一个数据库错误-
no such table: homework_pupil_assignments
在阅读了this之后,我意识到这可能是因为django没有像manage.py sqlall homework
那样更新我的模型的更改
我看到以下几点:
BEGIN;
CREATE TABLE "homework_pupil_assignments" (
"id" integer NOT NULL PRIMARY KEY,
"pupil_id" integer NOT NULL,
"assignment_id" integer NOT NULL,
UNIQUE ("pupil_id", "assignment_id")
)
;
CREATE TABLE "homework_pupil" (
"id" integer NOT NULL PRIMARY KEY,
"forename" varchar(30) NOT NULL,
"surname" varchar(30) NOT NULL,
"dateofbirth" date NOT NULL,
"year" integer NOT NULL,
"class_group" varchar(30) NOT NULL,
"email" varchar(75) NOT NULL
)
;
CREATE TABLE "homework_subject_teachers" (
"id" integer NOT NULL PRIMARY KEY,
"subject_id" integer NOT NULL,
"teacher_id" integer NOT NULL,
UNIQUE ("subject_id", "teacher_id")
)
;
CREATE TABLE "homework_subject" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(30) NOT NULL,
"level" varchar(30) NOT NULL
)
;
CREATE TABLE "homework_teacher" (
"id" integer NOT NULL PRIMARY KEY,
"forename" varchar(30) NOT NULL,
"surname" varchar(30) NOT NULL,
"email" varchar(75) NOT NULL
)
;
CREATE TABLE "homework_assignment" (
"id" integer NOT NULL PRIMARY KEY,
"assignment_name" varchar(30) NOT NULL,
"date_assigned" date NOT NULL,
"date_submitted" date NOT NULL
)
;
COMMIT;
然后我安装了South,按照指示启动并运行现有的应用程序,希望能成功地同步这些表。一点也不快乐。
有人能建议我如何让数据库(sqlite3)反映模型或指出我做错了什么吗?
发布于 2016-08-19 11:35:33
你可以试试这个!
python manage.py migrate --run-syncdb
我在Django 1.9和1.10上也遇到了同样的问题。这段代码行得通!
发布于 2017-11-21 16:57:19
如果您使用的是最新版本的django 2.x或1.11.x,则必须首先创建迁移,
python manage.py makemigrations
在此之后,您只需运行迁移命令来同步数据库。
python manage.py migrate --run-syncdb
这些命令将同步您的数据库和python模型,并且第二个命令将打印它后面的所有sql。
发布于 2012-10-09 00:05:40
sqlall
只打印SQL,并不执行它。syncdb
将创建尚未创建的表,但不会修改现有表。
https://stackoverflow.com/questions/12784835
复制相似问题