sql >> Database teknologi >  >> RDS >> PostgreSQL

Vil du migrere eksisterende auth.Brugerdata til den nye Django 1.5 brugermodel?

Syd er mere end i stand til at udføre denne migrering for dig, men du skal være smart og gøre det i etaper. Her er den trinvise vejledning:(Denne vejledning forudsatte, at du underklasser AbstractUser , ikke AbstractBaseUser )

  1. Før du skifter, skal du sørge for, at syd-understøttelse er aktiveret i applikationen, der indeholder din brugerdefinerede brugermodel (af hensyn til vejledningen kalder vi det accounts og modellen User ). På dette tidspunkt bør du ikke endnu har en tilpasset brugermodel.

    $ ./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. Opret en ny, tom brugermigrering i konto-appen.

    $ ./manage.py schemamigration accounts --empty switch_to_custom_user
    Created 0002_switch_to_custom_user.py.
    
  3. Opret din tilpassede User model i accounts app, men sørg for, at den er defineret som:

    class SiteUser(AbstractUser): pass
    
  4. Udfyld den tomme migrering med følgende kode.

    # 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. Kør migreringen

    $ ./manage.py migrate accounts
     - Migrating forwards to 0002_switch_to_custom_user.
     > accounts:0002_switch_to_custom_user
     - Loading initial data for accounts.
    
  6. Foretag ændringer i din brugermodel nu.

    # settings.py
    AUTH_USER_MODEL = 'accounts.User'
    
    # accounts/models.py
    class SiteUser(AbstractUser):
        site = models.ForeignKey(Site, null=True)
    
  7. oprette og køre migreringer til denne ændring

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

Helt ærligt, hvis du allerede har et godt kendskab til din opsætning og allerede bruger syd, burde det være så enkelt som at tilføje følgende migrering til dit kontomodul.

# 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:tilføjet omdøbning for auth_user_group tabel. FK'er vil automatisk opdatere til at pege på den korrekte tabel på grund af db-begrænsninger, men M2M-felters tabelnavne genereres ud fra navnene på de 2 endetabeller og skal manuelt opdateres på denne måde.

EDIT 2:Tak til @Tuttle &@pix0r for rettelserne.



  1. Dataadgang fra Raspberry Pi

  2. Adgang nægtet for bruger 'root'@'localhost' (ved hjælp af adgangskode:JA) - Ingen privilegier?

  3. Sådan åbnes en tabel i designvisning i Microsoft Access

  4. SQL Server bruger høj CPU, når der søges i nvarchar-strenge