ManyToManyField在使用自定义主键时引用“id”字段

时间:2017-04-04 12:52:03

标签: python django django-models

我正在为具有一些ManyToManyFields的模型使用自定义主键。当我更新模型并将对象添加到ManyToManyField(使用add(new_object))时,我收到一个错误,表示它使用id字段查找主键(可能存在于中间表中,但是不在模型中。)

psycopg2.DataError: invalid input syntax for integer: "TL98GK"
LINE 1: ...WHERE ("placedir_place_place_categ"."place_id" = 'TL98GK' A...

我一直在SO上搜索一段时间,但未能在确切的问题上归零。我想我可能不得不为ManytoManyFields使用自定义表(作为使用自定义主键的惩罚),但老实说,我不想沿着这条路走下去。

使用Django 1.10和Python 3

1 个答案:

答案 0 :(得分:2)

似乎迁移无法很好地检测外键类型更改。这是一个众所周知的bug。提到了一种解决方法here(即明确将字段type更改为varchar(32))。

但是,根据您的使用情况,您可能需要执行更多操作(例如更新表中的constraints等)。 (对于那些有兴趣走这条路线的人来说,here是一个带有相应迁移代码的示例)。

(p.s我刚决定不在具有多个字段的模型上使用自定义主键)