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

时间:2016-10-18 13:10:56

标签: python django django-models manytomanyfield

我在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能够捕捉到这种误导性的类型?

1 个答案:

答案 0 :(得分:0)

尝试重新创建迁移(如果是初始迁移,则使用./manage.py migrate YOURAPP PREVIOUS_MIGRATION_NUMBER./manage.py migrate YOURAPP zero取消应用迁移),删除迁移文件(不要忘记.pyc文件)并生成它试。

如果这没有帮助,您可以尝试使用正确的迁移字段创建自定义表,然后重新创建该迁移。