He estado usando custom primary keys para un modelo en Django. (Esto era porque estaba importando valores en la base de datos y que ya se habían unido de identificación, y que tenía sentido para preservar los valores existentes.)Django: haciendo un auto-incremento PK personalizado?
class Transaction(models.Model):
id = models.IntegerField(primary_key=True)
transaction_type = models.IntegerField(choices=TRANSACTION_TYPES)
date_added = models.DateTimeField(auto_now_add=True)
Sin embargo, ahora quiero añadir nuevas instancias del modelo a la base de datos, y me gustaría generar automáticamente una clave principal única. Pero si no se especifica la ID en el momento de la creación de la instancia, me sale un error:
t = Transaction(transaction_type=0)
t.save()
da:
IntegrityError at /page
(1048, "Column 'id' cannot be null")
¿Cómo puedo autogenerar un identificador único para especificar nuevos valores , sin tener que alterar la forma en que importo los valores existentes?
ACTUALIZACIÓN
He escrito este método personalizado, que parece funcionar ...
class Transaction(models.Model):
def save(self, *args, **kwargs):
if not self.id:
i = Transaction.objects.all().order_by('-id')[0]
self.id = i.id+1
super(Transaction, self).save(*args, **kwargs)
Tengo curiosidad: ¿cuál fue el problema de tener a django manejando la clave principal si está realizando una importación masiva? Nunca tuve la situación en la que la clave principal era el problema, a menos que esté importando en un sistema de producción/ejecución. –