ID vacío después de guardar el modelo en la base de datos

Cuando agrego un modelo de libro a la base de datos y luego miro la tabla de libros en SQL Database Browser, muestra que el campo de identificación está en blanco.

Es extraño porque tengo 1000 elementos en la tabla. No sé qué pasó, porque ~390 de ellos tienen su identificación poblada. Los demás tienen su id en blanco.

¿No debería ser el campo de identificación esencialmente la clave principal? Cómo pudo haber sido poblada en unos casos y en otros no.

Nota 1: En el pasado, eliminé registros manualmente; no estoy seguro de si eso podría ser un problema. Nota 2: Cuando yo print "newbook id:", repr(newbook.id), la identificación es diferente a la clave principal que se ve en SQL Database Browser.

Esto es lo que veo:

enter image description here

El código relevante está a continuación:

Modelo:

class Books (models.Model):
    bookname=models.CharField(_('bookname'), max_length=255)
    publisher=models.CharField(_('publisher'), max_length=255)
    description=models.TextField(_('description'), blank=True)
    coverart = models.ImageField(upload_to="art", blank=True, null=True)
    source=models.TextField(blank=True) #source of where it came from
    last_updated=models.DateTimeField(_('added'), default=datetime.now)
    category_id=models.ManyToManyField(Category, related_name='cat')
    model = models.ManyToManyField ('model', related_name = 'model')
    shortdesc=models.TextField(_('description'), blank=True)
    url = models.TextField(_('url'), blank=True)
    uid = models.IntegerField()`

Código que guarda un libro:

try: 
    exists = Books.objects.get(bookname=bookname)
except Books.DoesNotExist:
    print "book does not exist -- adding now"
    newbook=Books(bookname=bookname, uid = uid, source='Mysourceofbooks',     publisher=publisher, description = description, shortdesc=shortdesc, url = url)
    newbook.save()
    for cat in category_ids:
        newbook.category_id.add(cat)
else:
    print "log: we found the book in the DB already"`

preguntado el 12 de junio de 12 a las 20:06

¿De qué "id" estás hablando? El id campo agrega Django? O tu uid ¿campo? ¿Puede mostrar un ejemplo de código que da como resultado un libro con una "identificación vacía"? -

sí el id campo que agrega Django. El código es el segundo fragmento de código cuando hago newbook.save() -

Entonces, para ser claros, si usaste: newbook = Book(...); newbook.save(); print "newbook id:", repr(newbook.id), tu verias newbook id: None? -

Oh... no, eso aparece con una identificación. Pero en la base de datos cuando la abro en SQLite Database Browser, la tabla tiene un campo de identificación vacío. -

ah Mira, ese es el tipo de información que hubiera sido bueno que incluyeras en la pregunta;) -

2 Respuestas

Según la discusión en el chat: el id columna en el Book mesa de alguna manera logró perder su estatus como un PRIMARY KEY. Regrese eso y debería estar listo para comenzar.

Respondido el 12 de junio de 12 a las 21:06

Primero, puedes usar la función obtener_o_crear para probar/guardar modelo. Devuelve tupla - objeto, creado.

Si puede guardar el objeto con una nueva identificación: establezca object.pk en Ninguno y guárdelo. En su código es más loco piensa. => Libro es mejor nombre para modelo que Libros.

Que opinas con esto:

for cat in category_ids:
    print cat
    newbook.category_id.add(cat)

¿Qué es la variable category_ids? ¿Por qué nombrar "category_id" para ManyToMany?

Respondido el 12 de junio de 12 a las 20:06

Tus críticas son válidas, pero no responden a la pregunta. No utilice el botón "agregar una respuesta" para publicar algo que no sea una respuesta. - David Wolever

El category_id es un número entero que estoy extrayendo de una API - user1328021

Y de hecho usé 'Libro'. Cambié el modelo rápidamente porque estoy trabajando en algo confidencial y no quería tener variables realmente específicas para lo que estoy trabajando. - user1328021

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.