@kyanny's blog

人間は仮に地球に住まいを持っているだけで、 破壊する権利は与えられていない - レヴィ・ストロース 哲学者

Django: django.db.models で連続したアンダースコア __ を含むカラム名を使う

django.db.models では連続したアンダースコア __フィールドルックアップの意味を持つので、モデルのフィールド名には使えない。フィールド名の制約に制約の説明がある。モデルに記述することはできるが、マイグレーションを作成できない。

既存のテーブルが foo__bar のようなフィールドを持っていて、それを django から扱いたいケースもありえる。そのような場合は db_column を使えば良い。

class Foo(models.Model):
    foo_bar = models.CharField(db_column='foo__bar', max_length=200)

https://gitlab.com/kyanny/django-model-consecutive-underscore/-/blob/master/polls/models.py#L14-15

以下のようなマイグレーションファイルが作成される。データベースに直接 ALTER TABLE する必要はない。

https://gitlab.com/kyanny/django-model-consecutive-underscore/-/blob/master/polls/migrations/0002_foo.py