Estoy usando una clave principal personalizada para un modelo que tiene algunos ManyToManyFields. Cuando actualizo el modelo y agrego un objeto a ManyToManyField (usando add(new_object)), aparece un error que indica que está buscando la clave principal usando el campo id (que quizás exista en la tabla intermedia, pero no en el modelo ).
psycopg2.DataError: invalid input syntax for integer: "TL98GK" LINE 1: ...WHERE ("placedir_place_place_categ"."place_id" = 'TL98GK' A...He estado buscando en SO durante un tiempo, pero no he podido concentrarme en el problema exacto. Supongo que tendré que usar una tabla personalizada para ManytoManyFields (como castigo por usar una clave principal personalizada) pero, sinceramente, no quiero seguir ese camino.
Usando Django 1.10 y Python 3
Parece que la migración no detecta bien los cambios de tipo de clave externa. Es un error conocido. Aquí se menciona una solución alternativa (es decir, cambiar explícitamente el type de campo a varchar(32) ).
Sin embargo, es posible que deba hacer más (como actualizar las constraints , etc. en la tabla) según su caso de uso. (Para aquellos interesados en seguir esa ruta, aquí hay un caso de ejemplo con el código de migración correspondiente).
(ps, simplemente decidí no usar una clave principal personalizada en modelos con muchos campos)