PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

मौजूदा auth.User डेटा को नए Django 1.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 Create बनाएं 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 तालिका के लिए नाम बदलें। FKs db बाधाओं के कारण सही तालिका पर इंगित करने के लिए स्वतः अद्यतन होंगे, लेकिन M2M फ़ील्ड के तालिका नाम 2 अंत तालिकाओं के नाम से उत्पन्न होते हैं और इस तरह से मैन्युअल रूप से अद्यतन करने की आवश्यकता होगी।

संपादित करें 2:सुधार के लिए @Tuttle और @pix0r को धन्यवाद।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. रेल:पीजी रत्न स्थापित करने में त्रुटि

  2. PostgreSQL प्रक्रियात्मक भाषा C नहीं मिला

  3. पोस्टग्रेएसक्यूएल में एलपीएडी () फ़ंक्शन

  4. PostgreSQL में डेटाबेस की एक कॉपी बनाना

  5. हाइबरनेट:इंडेक्स बनाएं