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()'できないのですか?
- import呼び出しで、設計したフィールドを持つオブジェクトが取り込まれないのはなぜ
models.py
ですか? - これは仕様によるものですか?
- 私はそれを間違っているだけですか?