我用这样的tracks.models创建了一个db:
class Song(models.Model):
title = models.CharField(max_length=30)
album = models.ForeignKey(Album)
def __unicode__(self):
return self.title
并使用
python manage.py sqall tracks
python manage.py syncdb
然后我将模型更改为
class Song(models.Model):
songid = models.CharField(max_length=30)
title = models.CharField(max_length=30)
album = models.ForeignKey(Album)
def __unicode__(self):
return self.title
并且做了
python manage.py sqall tracks
python manage.py syncdb
一次。 sqall的输出:
BEGIN;
CREATE TABLE "tracks_song" (
"id" integer NOT NULL PRIMARY KEY,
"songid" varchar(30) NOT NULL,
"title" varchar(30) NOT NULL,
"album_id" integer NOT NULL REFERENCES "tracks_album" ("id")
)
;
CREATE INDEX "tracks_song_6781e42a" ON "tracks_song" ("album_id");
COMMIT;
执行syncdb:
Creating tables ...
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
但每当我试图访问tracks.models.Song.all()时,它说:
OperationalError: no such column: tracks_song.songid
所以我决定
python manage.py flush
python manage.py sqall tracks
python manage.py syncdb
(相同的输出)
但问题还没有消失,仍然没有这样的专栏:tracks_song.songid。 它背后的问题是什么?
答案 0 :(得分:0)
python manage.py sqlall app-name
只打印SQL语句,而不是创建或更改数据库结构,也就是说,它用于检查或告诉你django在数据库中实际做了什么。 Howerver,django版本< 1.7没有跟踪models.py中的类的变化(可以检测到新增或删除现有的类和syncdb),但是你可以使用南强>,或 django 1.7 做这样的事情。
python manage.py flush
将不可逆转地删除所有数据,但不会更改数据库中的表格。
Django 1.7: https://docs.djangoproject.com/en/dev/releases/1.7/#django-1-7-release-notes-under-development
你还应该注意到,如果你只需要一个id字段,那么歌曲类有一个默认的自动字段 id ,只需使用 song.id Django models Quick Example