1. ホーム
  2. パイソン

[解決済み] Django - Southを使用してモデルフィールドの名前を変更する方法は?

2022-04-09 21:16:59

質問

モデル内の特定のフィールドの名前を変更したい。

class Foo(models.Model):
    name = models.CharField()
    rel  = models.ForeignKey(Bar)

に変更する必要があります。

class Foo(models.Model):
    full_name     = models.CharField()
    odd_relation  = models.ForeignKey(Bar)

サウスを使った一番簡単な方法は何ですか?

どのように解決するのですか?

を使用することができます。 db.rename_column 関数を使用します。

class Migration:

    def forwards(self, orm):
        # Rename 'name' field to 'full_name'
        db.rename_column('app_foo', 'name', 'full_name')




    def backwards(self, orm):
        # Rename 'full_name' field to 'name'
        db.rename_column('app_foo', 'full_name', 'name')

の最初の引数は db.rename_column はテーブル名なので、どのように Django はテーブル名を作成します。 :

Django はモデルクラスとそれを含むアプリの名前から、自動的にデータベーステーブルの名前を導出します。モデルのデータベーステーブル名は、モデルの "app label" -- manage.py startapp で使った名前 -- をモデルのクラス名とアンダースコアでつないだものから作られます。

ProjectItemのように、複数単語のキャメルケースのモデル名がある場合、テーブル名は次のようになります。 app_projectitem (の間にアンダースコアは挿入されません)。 projectitem がキャメルケースであるにもかかわらず)。