PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Migrasi data auth.User yang ada ke model pengguna kustom Django 1.5 baru?

Selatan lebih dari mampu melakukan migrasi ini untuk Anda, tetapi Anda harus pintar dan melakukannya secara bertahap. Berikut panduan langkah demi langkah:(Panduan ini mengandaikan Anda subkelas AbstractUser , bukan AbstractBaseUser )

  1. Sebelum beralih, pastikan bahwa dukungan selatan diaktifkan di aplikasi yang berisi model pengguna khusus Anda (demi panduan ini, kami akan menyebutnya accounts dan model User ).Pada titik ini Anda seharusnya belum memiliki model pengguna khusus.

    $ ./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. Buat migrasi pengguna baru yang kosong di aplikasi akun.

    $ ./manage.py schemamigration accounts --empty switch_to_custom_user
    Created 0002_switch_to_custom_user.py.
    
  3. Buat User khusus Anda model di accounts aplikasi, tetapi pastikan itu didefinisikan sebagai:

    class SiteUser(AbstractUser): pass
    
  4. Isi migrasi kosong dengan kode berikut.

    # 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. Jalankan migrasi

    $ ./manage.py migrate accounts
     - Migrating forwards to 0002_switch_to_custom_user.
     > accounts:0002_switch_to_custom_user
     - Loading initial data for accounts.
    
  6. Buat perubahan apa pun pada model pengguna Anda sekarang.

    # settings.py
    AUTH_USER_MODEL = 'accounts.User'
    
    # accounts/models.py
    class SiteUser(AbstractUser):
        site = models.ForeignKey(Site, null=True)
    
  7. buat dan jalankan migrasi untuk perubahan ini

    $ ./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.
    

Sejujurnya, Jika Anda sudah memiliki pengetahuan yang baik tentang penyiapan Anda dan sudah menggunakan selatan, Ini harus sesederhana menambahkan migrasi berikut ke modul akun Anda.

# 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

EDIT 2/5/13:menambahkan ganti nama untuk tabel auth_user_group. FK akan otomatis memperbarui untuk menunjuk ke tabel yang benar karena batasan db, tetapi nama tabel bidang M2M dihasilkan dari nama 2 tabel akhir dan akan memerlukan pembaruan manual dengan cara ini.

EDIT 2:Terima kasih kepada @Tuttle &@pix0r atas koreksinya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Agen PostgreSQL di komite Standar SQL lagi

  2. pemilik database postgresql tidak dapat mengakses database - Tidak ada hubungan yang ditemukan.

  3. Apa Kerangka Ketersediaan Tinggi PostgreSQL Terbaik? Infografis PAF vs. repmgr vs. Patroni

  4. Mengimpor shapefile di postgresql di linux menggunakan pgadmin 4

  5. SQL Dapatkan semua catatan yang lebih lama dari 30 hari