sql >> データベース >  >> RDS >> PostgreSQL

既存のauth.Userデータを新しいDjango1.5カスタムユーザーモデルに移行しますか?

    サウスはあなたのためにこの移行を行うことができる以上のものですが、あなたは賢く、段階的にそれを行う必要があります。ステップバイステップガイドは次のとおりです(このガイドでは、AbstractUserをサブクラス化することを前提としています。 、AbstractBaseUserではありません )

    1. 切り替える前に、カスタムユーザーモデルを含むアプリケーションでサウスサポートが有効になっていることを確認してください(ガイドのため、accountsと呼びます。 およびモデルUser )。この時点では、まだは必要ありません。 カスタムユーザーモデルがあります。

      $ ./manage.py schemamigration accounts --initial
      Creating migrations directory at 'accounts/migrations'...
      Creating __init__.py in 'accounts/migrations'...
      Created 0001_initial.py.
      
      $ ./manage.py migrate accounts [--fake if you've already syncdb'd this app]
       Running migrations for accounts:
       - Migrating forwards to 0001_initial.
       > accounts:0001_initial
       - Loading initial data for accounts.
      
    2. アカウントアプリで新しい空白のユーザー移行を作成します。

      $ ./manage.py schemamigration accounts --empty switch_to_custom_user
      Created 0002_switch_to_custom_user.py.
      
    3. カスタムのUserを作成します accountsのモデル アプリですが、次のように定義されていることを確認してください:

      class SiteUser(AbstractUser): pass
      
    4. 空白の移行に次のコードを入力します。

      # encoding: utf-8
      from south.db import db
      from south.v2 import SchemaMigration
      
      class Migration(SchemaMigration):
      
          def forwards(self, orm):
              # Fill in the destination name with the table name of your model
              db.rename_table('auth_user', 'accounts_user')
              db.rename_table('auth_user_groups', 'accounts_user_groups')
              db.rename_table('auth_user_user_permissions', 'accounts_user_user_permissions')
      
          def backwards(self, orm):
              db.rename_table('accounts_user', 'auth_user')
              db.rename_table('accounts_user_groups', 'auth_user_groups')
              db.rename_table('accounts_user_user_permissions', 'auth_user_user_permissions')
      
          models = { ....... } # Leave this alone
      
    5. 移行を実行します

      $ ./manage.py migrate accounts
       - Migrating forwards to 0002_switch_to_custom_user.
       > accounts:0002_switch_to_custom_user
       - Loading initial data for accounts.
      
    6. 今すぐユーザーモデルに変更を加えてください。

      # settings.py
      AUTH_USER_MODEL = 'accounts.User'
      
      # accounts/models.py
      class SiteUser(AbstractUser):
          site = models.ForeignKey(Site, null=True)
      
    7. この変更の移行を作成して実行します

      $ ./manage.py schemamigration accounts --auto
       + Added field site on accounts.User
      Created 0003_auto__add_field_user_site.py.
      
      $ ./manage.py migrate accounts
       - Migrating forwards to 0003_auto__add_field_user_site.
       > accounts:0003_auto__add_field_user_site
       - Loading initial data for accounts.
      

    正直なところ、セットアップについて十分な知識があり、すでにサウスを使用している場合は、アカウントモジュールに次の移行を追加するのと同じくらい簡単です。

    # encoding: utf-8
    from south.db import db
    from south.v2 import SchemaMigration
    from django.db import models
    
    class Migration(SchemaMigration):
    
        def forwards(self, orm):
            # Fill in the destination name with the table name of your model
            db.rename_table('auth_user', 'accounts_user')
            db.rename_table('auth_user_groups', 'accounts_user_groups')
            db.rename_table('auth_user_permissions', 'accounts_user_permissions')
            # == YOUR CUSTOM COLUMNS ==
            db.add_column('accounts_user', 'site_id',
                models.ForeignKey(orm['sites.Site'], null=True, blank=False)))
    
        def backwards(self, orm):
            db.rename_table('accounts_user', 'auth_user')
            db.rename_table('accounts_user_groups', 'auth_user_groups')
            db.rename_table('accounts_user_user_permissions', 'auth_user_user_permissions')
            # == YOUR CUSTOM COLUMNS ==
            db.remove_column('accounts_user', 'site_id')
    
        models = { ....... } # Leave this alone
    

    編集2/5/13:auth_user_groupテーブルの名前変更を追加しました。 FKは、dbの制約により正しいテーブルを指すように自動更新されますが、M2Mフィールドのテーブル名は、2つのエンドテーブルの名前から生成されるため、この方法で手動で更新する必要があります。

    編集2:訂正してくれた@Tuttleと@pix0rに感謝します。



    1. ORACLE SQL:不足している日付を入力します

    2. Tablix:機能していない各ページでヘッダー行を繰り返します-Report Builder 3.0

    3. ナンバーシリーズジェネレータチャレンジソリューション–パート4

    4. PostgreSQLデータベースのすべてのテーブルを削除するにはどうすればよいですか?