我在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能够捕捉到这种误导性的类型?
答案 0 :(得分:0)
尝试重新创建迁移(如果是初始迁移,则使用./manage.py migrate YOURAPP PREVIOUS_MIGRATION_NUMBER
或./manage.py migrate YOURAPP zero
取消应用迁移),删除迁移文件(不要忘记.pyc
文件)并生成它试。
如果这没有帮助,您可以尝试使用正确的迁移字段创建自定义表,然后重新创建该迁移。