これは、標準 Django モデルからのフィールドの削除に関するフォローアップの質問です。つまり、すでに作成されているモデルからフィールドを動的に削除できます。この場合は User.email フィールドです。したがって、ユーザーのコードを変更せずに、フィールドの電子メールがユーザーから削除されます。例として、以下のコードを参照してください。
モデル (1) からフィールドを動的に削除できますが、それはサーバーの起動時に発生し、存在する場合は元に戻されます。syncdb はサーバーの実行を必要とせず、通常は削除コードを (どういうわけか) 無視しているように見えるため、このアプローチはフィールドがデータベースに表示されるのを防ぎません(2)。
モデルからフィールドを削除する方法はありますか(Djangoモデルであるため、ファイルを変更せずに)、データベースにも表示されないようにする方法はありますか?
前もって感謝します!
マーク
EDIT : 私の問題は、モデル ファイルからテキスト " " を削除していて、データベースからフィールドを削除したいということではありません。m = models.IntegerField()
問題は、以下のコードを使用して、別のファイルで既に宣言されているモデルからフィールドを削除していることです。syncdb を実行するたびに South でマイグレーションを作成することは解決策ではないと思います(3)。
追加情報:
- 1)現在、コードはmodels.pyにありますが、Djangoの起動コードをどこに置くのでしょうか? 動作します。
- 2)カスタムクエリを使用してpost_syncdbシグナルで削除できますが、もっとエレガントなものを望んでいます...または、より正確に、まったくエレガントです。
- 3) 明らかに syncdb がまだ 'removed' フィールドを認識しているので、それがまったく機能する場合)、それがまだ何らかの形でそこにあるので、South はそうするだろうと思います。
これはコードです (models.py):
class A(models.Model):
m = models.IntegerField()
for i, f in enumerate(A._meta.fields):
if f.name == 'm':
del A._meta.fields[i]
break
class B(A):
n = models.IntegerField()
for i, f in enumerate(B._meta.fields):
if f.name == 'm':
del B._meta.fields[i]
break
編集:(印刷で)チェックしたところ、syncdbで削除コードが実行されました。テーブルが作成される前に実行されます