当我在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)
并确实有它们。我想这是因为我们只是将它们添加到那个元组中,所以这并不奇怪。
那么重要的问题是:
models.py
?答案 0 :(得分:1)
为什么我不能
p.save()
?
您的人员表中没有名为name的列。 manage.py sql myapp
只显示django根据您的模型生成的sql。不是sqlite中的实际表。 (当然它应该匹配)重要的是你输入你的sqlite数据库并验证表及其架构。我发现在开发syncdb并在以后对模型进行更改时。重新同步db不会修改表。您必须删除该表,然后重新同步或更改表。
为什么导入调用不会带来我在models.py中设计的字段的对象?
请修改您的问题以反映此问题,看起来您在访问或实例化人物对象时没有任何问题。
这是设计吗?
不,我认为这不是设计,我相信这些是新用户学习新框架时出现的常见问题。在我学习的过程中,我经历了数周和数月的各种问题,他们会越走越远。只需确保验证一切正常。检查manage.py sql myapp是不相关的。检查数据库以查看schem更相关。 Django是一个成熟的平台,当它给你一个像missing colum
这样的错误时,99.9%的时间就意味着它是透明的。