Django에서는 다른 데이터베이스에 있는 모델을 생성할 수 있습니다. 그러나 이러한 모델 간의 외래 키 관계를 사용하는 데에는 제한이 있습니다.
다음 예를 고려하십시오.
<code class="python"># in 'urls' database class LinkModel(models.Model): host_id = models.IntegerField() path = models.CharField(max_length=255) # in default database class NewsModel(models.Model): title = models.CharField(max_length=50) link = models.ForeignKey(LinkModel)</code>
데이터베이스 라우터를 설정한 후 다음과 같은 경우 오류가 발생할 수 있습니다. 외래 키 할당:
<code class="python">newsItem.link = LinkModel.objects.using('urls').get(id=1) # Cannot assign "LinkModel: /": instance is on database "default", value is on database "urls"</code>
이는 Django가 데이터베이스 간 외래 키 관계를 지원하지 않기 때문입니다. 외래 키와 다대다 관계는 단일 데이터베이스 내부에 있어야 합니다.
분할을 했는데도 이 오류가 발생하는 경우 모델이 올바르게 작동한다면 Django의 ForeignKey 클래스에 있는 버그 때문일 수 있습니다. 이 문제를 해결하려면 프로젝트에 패치를 적용할 수 있습니다.
In validate() method # Old Code assert target._database == self.opts.db # New Code assert target._database == self.opts.db or target._database is None
데이터베이스 간 제한을 피하려면 대안을 사용할 수 있습니다. 접근하다. 다음과 같이 외래 키 관계를 추상화하는 모델 생성을 고려해보세요.
<code class="python">class AbstractLinkModel(models.Model): host_id = models.IntegerField() path = models.CharField(max_length=255) class LinkModel(AbstractLinkModel): class Meta: db_table = 'links' app_label = 'testapp' class NewsModel(models.Model): title = models.CharField(max_length=50) link = models.ForeignKey(AbstractLinkModel)</code>
추상 기본 모델을 사용하여 외래 키 관계를 정의하면 추상 모델의 여러 데이터베이스별 하위 클래스를 생성할 수 있습니다. 이를 통해 여러 데이터베이스에 데이터를 분할하면서 관계를 유지할 수 있습니다.
위 내용은 외래 키가 있는 Django 모델이 다른 데이터베이스에 존재할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!