我在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
文件)并再次生成它。
如果没有帮助,您可以尝试创建带有适当迁移字段的自定义表,然后重新创建该迁移。