Django 为中间 table 中的字段创建错误类型(manytomany)
Django creating wrong type for fields in intermediate table (manytomany)
我在 Django 中有一个模型,其中 pk
不是整数,它有一个 manytomany
字段。 manytomany
引用模型本身。
当我运行 makemigration
时我没有意识到,但它并没有像char(N)
那样在中间table创建字段。事实上,它创建为 integer
。
# models.py
class Inventory(models.Model):
sample_id = models.CharField(max_length=50, primary_key=True)
parent_id = models.ManyToManyField("self")
每当我尝试将对象添加到我的父模型时都会抛出错误
>>> 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...
我看到中间的字段 table, inventory_parent_id
, 由 Django 创建,它们的类型不正确。
Columns (3)
|--id (integer)
|--from_inventory_id (integer)
|--to_inventory_id (integer)
我的问题是: 手动改类型不好吗?它会破坏迁移吗?还是我必须做些什么才能让 Django 捕捉到这种误导性类型?
尝试重新创建迁移(如果是初始迁移,则使用 ./manage.py migrate YOURAPP PREVIOUS_MIGRATION_NUMBER
或 ./manage.py migrate YOURAPP zero
取消应用迁移),删除迁移文件(不要忘记 .pyc
文件)和重新生成。
如果这没有帮助,您可以尝试通过 table 使用适当的迁移字段创建自定义,然后重新创建该迁移。
我在 Django 中有一个模型,其中 pk
不是整数,它有一个 manytomany
字段。 manytomany
引用模型本身。
当我运行 makemigration
时我没有意识到,但它并没有像char(N)
那样在中间table创建字段。事实上,它创建为 integer
。
# models.py
class Inventory(models.Model):
sample_id = models.CharField(max_length=50, primary_key=True)
parent_id = models.ManyToManyField("self")
每当我尝试将对象添加到我的父模型时都会抛出错误
>>> 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...
我看到中间的字段 table, inventory_parent_id
, 由 Django 创建,它们的类型不正确。
Columns (3)
|--id (integer)
|--from_inventory_id (integer)
|--to_inventory_id (integer)
我的问题是: 手动改类型不好吗?它会破坏迁移吗?还是我必须做些什么才能让 Django 捕捉到这种误导性类型?
尝试重新创建迁移(如果是初始迁移,则使用 ./manage.py migrate YOURAPP PREVIOUS_MIGRATION_NUMBER
或 ./manage.py migrate YOURAPP zero
取消应用迁移),删除迁移文件(不要忘记 .pyc
文件)和重新生成。
如果这没有帮助,您可以尝试通过 table 使用适当的迁移字段创建自定义,然后重新创建该迁移。