Używam custom primary keys dla modelu w Django. (Było to bo importowania wartości w bazie danych, a oni już dołączony ID, a to miało sens zachowania istniejących wartości.)Django: tworzenie niestandardowego auto-inkrementacji PK?
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)
Jednak teraz chcę dodać nowe instancje modelu do bazy danych i chciałbym automatycznie wygenerować unikalny klucz podstawowy. Ale jeśli nie określisz identyfikator w momencie tworzenia instancji, otrzymuję błąd:
t = Transaction(transaction_type=0)
t.save()
otrzymujemy:
IntegrityError at /page
(1048, "Column 'id' cannot be null")
Jak mogę autogenerować unikatowy identyfikator, aby określić nowe wartości , bez konieczności zmiany sposobu importowania istniejących wartości?
UPDATE
Pisałem ten sposób niestandardowy, który wydaje się działać ...
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)
Jestem ciekawy - jaki był problem z obsługą django klucza podstawowego podczas importowania zbiorczego? Nigdy nie miałem sytuacji, w której klucz podstawowy był problemem - chyba, że importujesz do systemu produkcyjnego/działającego. –