sql >> Base de Datos >  >> RDS >> PostgreSQL

django.db.utils.IntegrityError:el valor de la clave duplicada viola la restricción única spirit_category_category_pkey

Después de mucha depuración, finalmente encontré la solución. La razón es que estaba tratando de insertar otras dos categories con id especificado s, lo que haría que postgresql dejara de aumentar el last_value de la sequence relativa . Solo como sigue:

0002_auto_20150728_0442.py

if not Category.objects.filter(pk=settings.ST_TOPIC_PRIVATE_CATEGORY_PK).exists():
    Category.objects.create(
        pk=settings.ST_TOPIC_PRIVATE_CATEGORY_PK,
        title="Private",
        slug="private",
        is_private=True
    )

if not Category.objects.filter(pk=settings.ST_UNCATEGORIZED_CATEGORY_PK).exists():
    Category.objects.create(
        pk=settings.ST_UNCATEGORIZED_CATEGORY_PK,
        title="Uncategorized",
        slug="uncategorized"
    )

La forma de arreglar esto es simple, ya sea cambiando el last_value manualmente en django , o simplemente no especifique la identificación, es decir, elimine las siguientes líneas:

....
pk=settings.ST_TOPIC_PRIVATE_CATEGORY_PK,
....
pk=settings.ST_UNCATEGORIZED_CATEGORY_PK,
....

Supongo que si dejas que Django se encargue de la tarea de administrar id , puede que no sea una buena idea especificar el id usted mismo al insertar nuevos datos.