※ RDBの制約を作るという意味ではないです。とりあえず動く ForeignKey フィールドを作るという意味です。
Django2.0で、別なDBを使うモデルに対して ForeignKey を作ろうとすると、save時に
Cannot assign "<YourModel>": the current database router prevents this relation.
というエラーが出て保存ができない。
その場合、データベースルータの allow_relation で True を返して、
def allow_relation(self, obj1, obj2):
if {obj1._meta.app_label, obj2._meta.app_label} \
== {'my_app_1', 'my_app_2'}:
return True
↑ すべて True でも良さそうだけど、app_label で判断するならこんな感じか?
デフォルトで None
https://docs.djangoproject.com/en/2.0/topics/db/multi-db/#allow_relation
ForeignKey を使うモデルを
related_model = models.ForeignKey(
YourModel, on_delete=models.DO_NOTHING,
db_constraint=False, null=True, blank=True)
このように db_constraint=False しておけば (こうしないとマイグレーションできない)
Foreign Key として動作するようになる。
が、コードにある通りDB上の制約は無い。
コメント