1

ユーザープロファイルに、データベース名を定義するための1つのフィールドがあり、そのユーザーは接続できます。

このような:

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    dbname = models.CharField(u'Database name', max_length=100, null=True, blank=True)

def create_user_profile(sender, instance, created, **kwargs):
    if created:
        UserProfile.objects.create(user=instance)

post_save.connect(create_user_profile, sender=User)

UserProfileで事前設定されたデータベース名を使用するように(実行時に)djangoを設定するにはどうすればよいですか?

ありがとう

4

1 に答える 1

6

Django では、settings.py ファイルでこのような複数のデータベースを定義します

DATABASES = {
    'app_data': {
        'NAME': 'app_data',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'postgres_user',
        'PASSWORD': 's3krit'
    },
    'DBNAME_1': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.mysql',
        'USER': 'mysql_user',
        'PASSWORD': 'priv4te'
    }
}

ここで、app_data がすべてのユーザーを保存する場所であり、user=User_1 が必要であり、User_1 のデータベースに接続することを検討してください。関数を使用してusing()、データベース接続を名前で選択します

>>> user = Auth.objects.using('app_data').get(user=user)
>>> print user.database
DBNAME_0
>>>Data = SomeTable.objects.using(user.database).all()

Django で複数のデータベースを使用する方法の詳細については、こちらをご覧ください

于 2013-01-08T17:38:51.417 に答える