🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

3005閲覧

django でカラムを追加する際、特定のカラムの後ろにカラムを追加したい

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/27 11:19

django の migrate で特定のカラムの後ろにカラムを追加したい

今既に、既存のテーブルがあるのですが、そのテーブルのカラムに新しくカラムを追加したいのですが、 models.py にカラムを書き足しても、その位置にカラムが追加されないので、やり方が知りたいです。

今現状 users テーブルが存在する カラム id name tel status created_at updated_at このようなカラムがある name の後ろに email のカラムを追加したいのですが、 modeles.py に新しく email を書き足して、マイグレーションファイルを作り、実行すると、 updated_at の後ろに email が追加されてしまう

どなたかわかるかたいましたら、ご教示お願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuokada

2019/12/27 18:40

どのRDBMSを使っているのか分からないと回答が得られないと思います。 ちなみに、SQLiteはカラムの追加時は末尾にしか追加できない仕様だったと記憶してます。
退会済みユーザー

退会済みユーザー

2019/12/28 06:46

大変申し訳ございません。 MySQL になります。 失礼いたしました。 お分かりになれば、ご教示頂きたいです。 宜しくお願い致します。
guest

回答1

0

空のマイグレーションファイルを作成してそこに自分でmigrations.RunSQL()を定義すればカラムの位置を調整することが出来るように思います。
https://docs.djangoproject.com/en/3.0/ref/migration-operations/#runsql

手順としては次のように感じです。

$ python3 manage.py makemigrations --empty <your_app_name> $ vim <上で作成されたファイル> $ python3 manage.py migrate <your_app_name>

マイグレーションファイルの一部抜粋。

class Migration(migrations.Migration): dependencies = [ ('posts', '0002_auto_20191230_1150'), ] operations = [ # https://docs.djangoproject.com/en/3.0/ref/migration-operations/#runsql migrations.RunSQL( "ALTER TABLE users ADD email VARCHAR(255) after name", # <= MySQLの生のクエリを記述 "ALTER TABLE users DROP email" ) ]

参考url: Executing Custom SQL in Django Migrations | End Point
参考url: Django migrate コマンドで、SQLを直接実行する | Monotalk

投稿2019/12/30 12:12

yuokada

総合スコア550

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/12/31 05:27

yuokada 様 なるほど。。 django ではよしなにやってくれる機能はないのですね・・ Laravel だとマイグレーションファイルを作成して `->alter('name')` を書き足せば、 "ALTER TABLE users ADD email VARCHAR(255) AFTER name" これと同じクエリになってくれますが、そう言った記述の仕方はない感じですね・・ ありがとうございます! 試して見ます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問