PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Di chuyển dữ liệu xác thực hiện có của người dùng sang mô hình người dùng tùy chỉnh Django 1.5 mới?

Nam có nhiều khả năng thực hiện việc di chuyển này cho bạn, nhưng bạn cần phải thông minh và thực hiện theo từng giai đoạn. Đây là hướng dẫn từng bước:(Hướng dẫn này giả định trước cho bạn lớp con AbstractUser , không phải AbstractBaseUser )

  1. Trước khi thực hiện chuyển đổi, hãy đảm bảo rằng hỗ trợ phía nam được bật trong ứng dụng có chứa mô hình người dùng tùy chỉnh của bạn (vì lợi ích của hướng dẫn, chúng tôi sẽ gọi nó là accounts và mô hình User ). Tại thời điểm này, bạn chưa nên có một mô hình người dùng tùy chỉnh.

    $ ./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. Tạo di chuyển người dùng trống, mới trong ứng dụng tài khoản.

    $ ./manage.py schemamigration accounts --empty switch_to_custom_user
    Created 0002_switch_to_custom_user.py.
    
  3. Tạo User tùy chỉnh của bạn mô hình trong accounts ứng dụng, nhưng hãy đảm bảo rằng nó được định nghĩa là:

    class SiteUser(AbstractUser): pass
    
  4. Điền vào phần di chuyển trống với mã sau.

    # 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. Chạy quá trình di chuyển

    $ ./manage.py migrate accounts
     - Migrating forwards to 0002_switch_to_custom_user.
     > accounts:0002_switch_to_custom_user
     - Loading initial data for accounts.
    
  6. Thực hiện bất kỳ thay đổi nào đối với mô hình người dùng của bạn ngay bây giờ.

    # settings.py
    AUTH_USER_MODEL = 'accounts.User'
    
    # accounts/models.py
    class SiteUser(AbstractUser):
        site = models.ForeignKey(Site, null=True)
    
  7. tạo và chạy di chuyển cho thay đổi này

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

Thành thật mà nói, nếu bạn đã có kiến ​​thức tốt về thiết lập của mình và đã sử dụng phía nam, thì việc này sẽ đơn giản như việc thêm di chuyển sau vào mô-đun tài khoản của bạn.

# 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

CHỈNH SỬA 2/5/13:đã thêm đổi tên cho bảng auth_user_group. FK sẽ tự động cập nhật để trỏ đến đúng bảng do các ràng buộc của db, nhưng tên bảng của trường M2M được tạo từ tên của 2 bảng cuối và sẽ cần cập nhật thủ công theo cách này.

CHỈNH SỬA 2:Cảm ơn @Tuttle &@ pix0r đã chỉnh sửa.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhập kết xuất MySQL vào cơ sở dữ liệu PostgreSQL

  2. Tên múi giờ có các thuộc tính giống hệt nhau mang lại kết quả khác khi áp dụng cho dấu thời gian

  3. Lumen - Tạo kết nối cơ sở dữ liệu trong thời gian chạy

  4. Quản lý &Giám sát Cơ sở dữ liệu cho PostgreSQL 12

  5. Psycopg2 Chèn vào bảng với trình giữ chỗ