2011-03-21 13 views
4

私はDjangoアプリケーションを作成しました。今私はモデルのDBフィールドの1のフィールドタイプを変更したいと思っていました。現在の型のデータベースにはすでにレコードがいくつかあるので、単にmodels.pyで型を変更するだけで型を変更することはできないと思います。グーグルでは、SQLコンソールを使ってテーブルを変更してテーブルを削除せずに変更できることを知りました。しかし、Djangoの初心者である私はこれを行うことができません。誰かが私にこれを手伝ってもらえますか?これは私のmodels.pyですテーブルを削除せずにモデルのDjangoデータ型を変更する

class EmployeeDetails(models.Model): 
    userName = models.CharField(max_length=200) 
    designation = models.CharField(max_length=200) 
    employeeID = models.IntegerField() 
    contactNumber = models.CharField(max_length=200) 
    project = models.CharField(max_length=200) 
    dateOfJoin=models.TextField() 

今、私はdateOfJoin = models.DateField()を変更したいと思います。 SQLFolderをDateFieldに変更するには、SQLコンソールコマンドを使用してテーブルを削除しないでください。

+0

誰かがDjangoバージョン> 1.7で答えてください。 – Jay

答えて

0

私は別の方法。私はSQLコンソールでデータベースを選択し、SQLクエリで新しい列を追加しました。そして、それはうまくいった:)、おかげでたくさんの助けをくれた皆さん、ありがとう。

2

South projectは、スキーマとデータの移行によく使用されます。テキストフィールドを日付フィールドに変換するために使用できるのであれば、わかりませんが、可能であれば私は驚かないでしょう。

18

必要なアプリがここSouth
ある手順(詳細はドキュメントを参照してください)、次のとおりです。

./manage.py convert_to_south yourapp 

これは次に追加の移行フォルダと偽の最初の移行

を作成します。あなたのmodels.pyでnew_dateOfJoinのDateField:

./manage.py migrate yourapp 

これが作成されますとAPPL Yすぐあなただけの日に、あなたのテキスト値をキャストし、新しい分野 に保存されますdatamigration 0003 fileを作成し、DBに

をこのフィールドを追加する(_... 0002という名前)の移行は、この移行を適用します。

最後のステップは、あなたがドンDBフィールドの名前を変更することである(これは0004 _....移行ファイルを作成します)古い日付フィールドをコメントアウトして、再度移行するために、あなたのmodels.pyファイルを変更

./manage.py migrate yourapp 

既存のコードを変更する必要があります:

./manage.py schemamigration yourapp rename_dateofjoin --empty 

これはhereを説明したように、この0005ファイルを変更しますが、this other exampleに似db.rename_column('app_foo', 'name', 'full_name')を使用する手動0005_rename_dateofjoin
という名前の空のスキーマの移行ファイルを作成します。

これらの5つのステップの代わりにテーブル全体をドロップする方が簡単ですが、アプリのインスタンスが複数ある場合(実動サーバーと開発マシンなど)、この種のツールが必要です。
5つのステップでこれを行うこともできますが、時にはやり直すのが難しい場合もあります。

+0

返信ありがとうDominique :) –

+0

よろしくお願いします。それがあなたの質問に答えるなら、私の答えの横にある「チェック」マークをクリックして質問を閉じます。 –

+0

ありがとう、非常に便利なウォークスルー! – Nils

関連する問題