5

これは、最初のデータベース DB1 の私のモデルです。

     from django.db import models 

     class Company(models.Model): 

          name = models.CharField(max_length=100, null=True)
          address = models.TextField(max_length=200, null=True)
          website = models.CharField(max_length=200, null=True)
          conatct_no = models.CharField(max_length=20, null=True)
          email = models.EmailField(max_length=20, null=True)
          logo = models.FileField(upload_to='logo/', blank=True, null=True)
          created = models.DateTimeField('company created', auto_now_add=True)
          updated = models.DateTimeField('company updated', auto_now=True, null=True)
          def __unicode__(self):  # Python 3: def __str__(self):
                return self.name

2 番目のデータベース Db2 のモデル:

    from django.db import models

    from leavebuddymaster.models import Company

    class Department(models.Model): 
       company = models.ForeignKey(Company)
       department_name = models.CharField(max_length=50, null=True)
       created = models.DateTimeField('department created', auto_now_add=True)
       updated = models.DateTimeField('department updated', auto_now=True, null=True)
       def __unicode__(self):  # Python 3: def __str__(self):
            return self.department_name

Department テーブルを開くと、次のようなエラーが表示されます。

      ProgrammingError at /admin/leavebuddyapp/department/
      (1146, "Table 'leavebuddy_master.leavebuddyapp_department' doesn't exist")

2 つのデータベースに対して、settings.py のすべての設定を正しく行いました。正しい方向に私を導いてください。事前にサンクス。

4

1 に答える 1

15

おっしゃる通り、Django は現在、複数のデータベースにまたがる外部キー関係をサポートしていません。クロスデータベース関係 から[編集 2020: Django バージョン バンプ] :

ルーターを使用してモデルを異なるデータベースに分割した場合、それらのモデルによって定義される外部キーと多対多の関係は、単一のデータベースの内部にある必要があります

これは、参照整合性のためです。2 つのオブジェクト間の関係を維持するために、Django は関連するオブジェクトの主キーが有効であることを知る必要があります。主キーが別のデータベースに保存されている場合、主キーの有効性を簡単に評価することはできません

あなたが試すことができると私が考えた解決策(ただし、他の問題が発生する可能性があります):

from leavebuddymaster.models import Company

class Department(models.Model): 
    company_id = models.IntegerField()
    
    @property
    def company(self):
        return Company.objects.get(pk=self.company_id)

これによりDepartment.company、例で通常行うように参照できます。それを設定するだけの問題ですDepartment.company_id = Company.pk。それが役立つこと、または少なくともより良い解決策を刺激することを願っています!

于 2014-04-24T15:46:00.493 に答える