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 する必要はない。