私はpk
がmanytomany
のフィールドを持つDjangoのモデルを持っています。このmanytomany
はモデル自体を参照します。Djangoは中間テーブル(manytomany)のフィールドに間違った型を作成します
私がmakemigration
を実行したとき、わかりませんでしたが、中間テーブルのフィールドはchar(N)
として作成されませんでした。実際には、integer
として作成されます。
# models.py
class Inventory(models.Model):
sample_id = models.CharField(max_length=50, primary_key=True)
parent_id = models.ManyToManyField("self")
これは、私が作成した、inventory_parent_id
、中間テーブル内のフィールドを見て、私は私の親モデル
>>> p = Inventory.objects.get(sample_id='sample01')
>>> child = Inventory.objects.get(sample_id='sample02')
>>> p.parent_id.add(child)
にオブジェクトを追加しようとするたびに、私はエラー
psycopg2.DataError: invalid input syntax for integer: "sample02"
LINE 1: ...HERE ("inventory_parent_id"."to_inventory_id" IN ('sample...
を取得し、エラーをスローしますDjangoの型が正しくない。
Columns (3)
|--id (integer)
|--from_inventory_id (integer)
|--to_inventory_id (integer)
私の質問はです:私は手動タイプを変更した場合、それは悪いですか?移行が壊れますか?あるいは、私は何かをしなければならなかったので、Djangoはこの誤解を招くタイプをキャッチできますか?
私は問題がどこから来ているのか知っていると思います。私は最初に「manytomany」というフィールドを作り、「makemigrations」+「migrate」を実行しました。次に、フィールドのpkをcharフィールドに変更し、Djangoは中間テーブルへの変更を認識しませんでした。私は前の2つに移行を偽って、やり直します。 – mk2
答えは私がする必要があるものではありませんが、私は受け入れられたとマークしました。私の前のコメントとまったく同じように起こった。私は2つ前の1つに移行を偽造し、pkの変更のための移行を作成し、その後、フィールドをmanytomanyに変更する別の移行を作成しました。フィールドidが削除できないと不平を言っていたので、1回の移行でそれを行うことはできませんでした... – mk2