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 使用适当的迁移字段创建自定义,然后重新创建该迁移。