個々のオブジェクトをユーザーに追跡するために、モデルに新しいフィールドを追加しました。
次に、south を使用して移行を生成すると、ユーザー フィールドにデフォルト値がないため、この移行のデフォルト値を求められました。ユーザーのIDとして1を入力しました。開発用の db バックエンドとして sqlite を使用しています。sqlite シェルを開いて db スキーマを確認すると、デフォルト値がまだ残っています。
CREATE TABLE "base_category" ("user_id" integer NOT NULL DEFAULT 1,
"id" integer PRIMARY KEY,
"name" varchar(80) NOT NULL);
ただし、移行ファイルでは次のようになります。
# Adding field 'TimeSlot.user'
db.add_column('base_timeslot', 'user',
self.gf('django.db.models.fields.related.ForeignKey')
(default=1, to=orm['auth.User']),
keep_default=False)
私が南のドキュメントを正しく理解していれば、そこにあるはずはありません:
True の場合
keep_default
、フィールドで指定されたデフォルト値は、その列のデータベース スキーマに永続的に追加されます。そうでない場合、デフォルトは列を追加するときにのみ使用され、その後削除されます。
SOに関する他の質問では、デフォルト値はdbレベルではなくpythonで処理されることが指摘されました。
最後に私の質問:
- もう必要ないので、データベースに残っているデフォルト値を気にする必要がありますか?
- SQLプロンプトを使用してデフォルト値を手動で削除する方法を見つけることができなかったため、sqliteの問題でしょうか?