Django为中间表中的字段创建了错误的类型(many many)



我在Django中有一个模型,其中pk不是整数,它有一个字段是manytomany。此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")

每当我尝试向父模型添加对象时,就会抛出错误

>>> 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创建的中间表inventory_parent_id中的字段类型不正确。

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文件)并再次生成它。

如果没有帮助,您可以尝试创建带有适当迁移字段的自定义表,然后重新创建该迁移。

相关内容

  • 没有找到相关文章

最新更新