当我通过https://docs.djangoproject.com/en/1.4/topics/db/models/工作时,在 django 中,我启动了一个名为的新应用程序,并按照演练定义myapp
编辑了文件:models.py
class Person(models.Model):
GENDER_CHOICES = (
(u'M', u'Male'),
(u'F', u'Female')
)
name = models.CharField(max_length=60)
gender = models.CharField(max_length=2, choices=GENDER_CHOICES)
然后我运行manage.py syncdb
并尝试在manage.py shell
交互式提示中运行接下来的几行
>>> p = Person(name="Fred Flintstone", gender="M")
>>> p.save()
Traceback (most recent call last):
.…[I removed a few lines]...
DatabaseError: table myapp_person has no column named name
>>> p.gender
u'M'
>>> p.get_gender_display()
u'Male'
...所以我检查了 sqlite3 在数据库中是否有一个名为 Person 的对象,其名称为列
C:\Users\djangoSite>python manage.py sql myapp
BEGIN;
CREATE TABLE "myapp_person" (
"id" integer NOT NULL PRIMARY KEY,
"name" varchar(60) NOT NULL,
"gender" varchar(2) NOT NULL
);
当然可以!所以 Person 模型存在,但是它没有得到我在 models.py 中设计的字段?我打了一个dir(Person)
电话,它确认姓名和性别字段不在那里……其次,我做了dir(p)
,而且确实有。我想那是因为我们只是将它们添加到那个元组中,所以这并不奇怪。
那么最大的问题是:
- 为什么我不能'p.save()'?
- 为什么导入调用不带入具有我设计的字段的对象
models.py
? - 这是设计使然吗?
- 我只是做错了吗?