2017-08-02 4 views
0

Djangoでデータベースモデルを定義するためのソリューションを探しました。 私のsettings.pyに3つのデータベースdjangoでmodelwiseを定義する

settings.py

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    }, 
    'db_one': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db_one.sqlite3'), 
    }, 
    'db_two': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db_two.sqlite3'), 
    }, 
} 

そして、私の世論調査で/ models.py

class Question(models.Model): 
    question_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 


    def __str__(self): 
     return self.question_text 

    def was_published_recently(self): 
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 

@python_2_unicode_compatible 
class Choice(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE) 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 


    def __str__(self): 
     return self.choice_text 

は今、私はdb_oneデータベースに質問モデルを追加したいがありますようにと選択モデルをdb_twoデータベースでどうすればいいのですか?

ルータを試してみてください。multiple databases and multiple models in django 唯一のデフォルトのデータベースだけで、その後私は、デフォルトのデータベースに空白の設定を入れて、移行しようと試みたが、それは私に

答えて

0
ジャンゴで賢明なアプリケーションのためのデータベースを定義するために、その方法を

または

があるエラーを与えます

データベースusingメソッドを使用することができます。例えば

db_oneからすべてのデータをフェッチすると、次のようになります。あなたは右、デフォルト以外のデータベースにあなたのモデルを移行する必要が

all_data = YourModel.objects.using('db_one').all()

+0

最初にデータを取得するのは後でピクチャに来るだけです。私はそのテーブルをデータベースに作成したいと思っています。私はそのテーブル(テーブルを作成)をマイグレーションできません。 – Kartik

0

移行中にデータベースを選択できます。

# database name from settings.py 
./manage.py migrate --database=<database-name> 

django docs

使用すると、1つのデータベース内のいくつかのテーブルと他のデータベース内のいくつかのテーブルを維持したい場合は、私はテーブルごとに、移行を作成することをお勧めします。その後、あなたはあなたが--fakeフラグを特定のデータベースの特定のテーブルの作成をスキップすることができます

./manage.py migrate <your-app-name> <migration-number> --database=<database-name> 

EDIT

を実行することができます。

  • まず、すべての移行を削除します。
  • Choiceモデルのコメントはmodels.pyです。
  • 実行models.pymanage.py makemigrations =>
  • これは(Questionモデル用)移行001を作成したとのコメントを解除しますChoiceモデル。
  • run manage.py makemigrations再度。これは
  • 実行(Choiceモデルのために)移行002を作成したとしmanage.py migrate <app-name> 001 --database=db_one =>これはdb_oneで質問モデルを作成します
  • 実行manage.py migrate <app-name> 001 --database=db_two --fake =>この
    db_two
  • ランでテーブルの作成をスキップしますpython manage.py migrate <app-name> 002 --database=db_one --fake = >これはdb_oneのChoiceテーブルの作成をスキップします
  • run python manage.py migrate <app-name> 002 --database=db_two =>これはdb_twoでChoiceモデルを作成します。
+0

いいえ、私は別のモデル私はテーブルをマイグレーションするときに1つのアプリケーションので、デフォルトのデータベースのみを作成します – Kartik

+0

あなたは別に何を意味するのですか?異なるデータベースにテーブルのコピーを保管していますか? – ohannes

+0

いいえ、質問モデルのコピーを作成したくありません。db_oneでのみ作成され、選択肢テーブルはデフォルトまたは他のデータベースでdb_twoで作成されません。 – Kartik

関連する問題