martes, 18 de agosto de 2009

psycopg2.ProgrammingError: there is no unique constraint

Al estar creando un modelo con 2 ForeignKeys, y hacer python manage.py syncdb
me ocurrió el siguiente error:
psycopg2.ProgrammingError: there is no unique constraint matching given keys for
referenced table "app_orderdetail"

Tuve un buen rato cabeceándome con esta cuestioncita, y el problema era el siguiente:
Me faltaba una clave primaria en la tabla a la cual estaba haciendo referencia con el ForeignKey (app_orderdetail). Y supongo que me pasó por ocupar bases de datos respaldadas desde sistemas que ya llevaban un tiempo corriendo.

La solución:
Agregar la clave primaria via SQL o bien borrar la tabla para que el syncdb vuelva a crearla nuevamente.
El SQL para agregar la clave primaria es:

ALTER TABLE app_orderdetail ADD PRIMARY KEY (id);