Я использовал пользовательские первичные ключи для модели в Django.(Это было потому, что я импортировал значения в базу данных, и к ним уже были прикреплены идентификаторы, и имело смысл сохранить существующие значения.)
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)
Однако теперь я хочу добавить новые экземпляры модели.в базу данных, и я хотел бы автоматически создать уникальный первичный ключ.Но если я не укажу идентификатор во время создания экземпляра, я получу сообщение об ошибке:
t = Transaction(transaction_type=0)
t.save()
дает:
IntegrityError at /page
(1048, "Column 'id' cannot be null")
Как автоматически сгенерировать уникальный идентификатор дляуказать для новых значений, без необходимости изменять способ импорта существующих значений?
ОБНОВЛЕНИЕ
Я написал этот пользовательский метод, который, кажется, работает ...
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)