0

当我通过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),而且确实有。我想那是因为我们只是将它们添加到那个元组中,所以这并不奇怪。

那么最大的问题是:

  1. 为什么我不能'p.save()'?
  2. 为什么导入调用不带入具有我设计的字段的对象models.py
  3. 这是设计使然吗?
  4. 我只是做错了吗?
4

1 回答 1

1

为什么我不能p.save()

您的人员表中没有名为 name 的列。 manage.py sql myapp只显示 django 根据您的模型生成的 sql。不是 sqlite 中的实际表。(当然它应该匹配)输入您的 sqlite 数据库并验证表及其架构是很重要的。我发现在开发时我同步数据库并稍后对模型进行更改。重新同步 db 不会修改表。您必须删除表然后重新同步或更改表。

为什么 import 调用没有引入我在 models.py 中设计的字段的对象?

请修改您的问题以反映此问题,看起来您在访问或实例化人员对象时没有任何问题。

这是设计使然吗?

不,我不认为这是设计使然,我相信这些是新用户学习新框架时出现的常见问题。在我学习的几周和几个月里,我遇到了各种各样的问题,它们会越来越远。只要确保您正在验证事情是否正常工作。检查 manage.py sql myapp 没有那么重要。检查您的数据库以查看方案更相关。Django 是一个成熟的平台,当它在 99.9% 的情况下给你一个错误missing colum 时,这意味着它是透明的。

于 2012-04-27T00:03:24.653 回答