Django2.0 DB間にまたがった ForeignKey を作る

(Comments)

※ 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上の制約は無い。

Current rating: 5

Comments

Recent Tweets

  • 大坂昌彦

    大坂昌彦 @masahiko_osaka

    ytyng

    ついに犯人がわかってしまいました! ナル、一昨日にも僕だったので、昨日の人しかいません!! ペダルにガムテープ貼っても良いけど、剥がして帰って欲しい。散々、自分の足で踏みつけたガムテープを何で次の人が剥がさなきゃならないの??自分… https://t.co/Contz66ZK9
    1 month ago

  • ytyng

    ytyng @ytyng

    Shopify の在庫数更新API GraphQLの場合: 一括更新できる 絶対値更新できない REST API の場合: 一括更新できない 絶対値更新できる なんなのそれ https://t.co/0QyibNQXdt
    1 month, 3 weeks ago

  • ytyng

    ytyng @ytyng

    #bulma スペーシングヘルパー、マージされてる! もうこれBootstrapじゃん https://t.co/uI8fZ6lAOw
    1 month, 3 weeks ago

Recent Posts

Archive

2020
2019
2018
2017
2016
2015
2014
2013
2012
2011

Categories

Authors

Feeds

RSS / Atom