2011-06-29 10 views
1

私はNotesと呼ばれる新しいフィールドをNotesと1対1の関係で持っています。 mysqlのClientテーブルの下にノートの列を追加できます。 python manage.py syncdbを使用すると動作しません。そこで、既存のテーブルにmysqlの1対1フィールドを追加する方法を知りたいと思います。既存のテーブルに1対1の列を追加したい

models.py

class Note(models.Model): 
    datetime = models.DateTimeField(default=datetime.now) 
    user = models.ForeignKey(User) 
    note = models.TextField() 

    def __unicode__(self): 
     return unicode(self.name) 

class Client(models.Model): 
    note = models.OneToOneField(Note) # new 
    def __unicode__(self) 
     return unicode(self.user) 

答えて

1

syncdbの実行は、データを破壊しないようにするために、データベースを変更しません。 django bookを参照してください。

データベースを手動で更新することも、Southのような自動化された移行ツールを(自己責任で)使用することもできます。

編集: django bookには、SQLの例と一緒に手動で変更した場合の詳細な手順を読むこともできます。その他の有用な情報はMySQL manualにあります。

+0

手動で行う場合は 'alter tables'コマンドを使用することができますが、これを行う方法がわかりません。 – Shehzad009

+1

あなたの最善の策は、単に南を使用することです。私はそれがかなりうまく動作することを発見しました(たとえ最初に使用するのが少し混乱しても)。ただし、移行を実行する前に必ずテーブルをバックアップしてください。 –

0

あなたはアプリケーション名が何であるかは言わなかったので、私はそれがfooappだと仮定します。 SQLジャンゴで

まず外観は、関連するテーブルを作成するために使用されるでしょう:追加フィールドについては

python manage.py sql fooapp 

は、このSQLコマンドを実行します。

...あなたは、フィールドの宣言である
ALTER TABLE fooapp_client ADD ... 

"manage.py sql fooapp"の出力で見た

新しいフィールドで動作する "manage.py sql fooapp"出力で、インデックス/制約コマンドを実行することを忘れないでください。

+0

steyn:私が 'python manage.py sql mmc'を実行すると、 'ALTER TABLE' mmc_note'を追加します。CONSTRAINT 'user_id_refs_id_68316a64' FOREIGN KEY(' user_id')REFERENCES 'auth_user'(' id'); ' note_id'整数はNOT NULL UNIQUE'です。しかし、mysqlでは、クライアント用のテーブルは更新されませんでした。 Client tableの下の注釈のための1対1の関係のalter tableの完全なコマンドを教えてください。 – Shehzad009

関連する問題