1

個々のオブジェクトをユーザーに追跡するために、モデルに新しいフィールドを追加しました。

次に、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で処理されることが指摘されました。

最後に私の質問:

  1. もう必要ないので、データベースに残っているデフォルト値を気にする必要がありますか?
  2. SQLプロンプトを使用してデフォルト値を手動で削除する方法を見つけることができなかったため、sqliteの問題でしょうか?
4

2 に答える 2

2

これはバグとは見なされませんでしたが、現在はバグです。South 0.7.7 (これを書いている時点で公開予定) で修正されるはずです。

于 2013-01-14T22:55:41.473 に答える
0
  1. DBのDEFAULT 1は、テーブルに新しいインスタンスを作成する場合、このフィールドにデフォルトで 1 が入力されることを指定するだけですが、この値は変更できます。値の編集を無効にすること keep_defaultです。たとえば、新しいフィールドはデフォルトで値 1 を取得し、値を変更することはできません。これはあなたの場合ではありません。新しいインスタンスではデフォルト値 1 を取得しますが、値を編集できます。

  2. ポイント番号 1 の続き - 値を削除する必要はありませんDEFAULT 1。これは、フィールドの新しいインスタンスのデフォルト値の正しい表現であるためです。

于 2012-07-23T16:22:14.470 に答える