У меня есть первичный ключ ID CharField в моей модели Image
, я хочу создать уникальные идентификаторы для вновь создаваемых объектов.Я пытаюсь достичь этого путем переопределения метода сохранения модели:
def save(self, *args, **kwargs):
if not self.pk: # is created
self.id = uuid.uuid4().hex
while Image.objects.filter(id=self.id).exists():
self.id = uuid.uuid4().hex
return super().save(*args,**kwargs)
Проблема в том, что save()
не вызывается при создании объектов с Image.objects.create()
, он вызывается только когда ясоздайте объект с помощью image=Image(...)
и затем вызовите image.save()
.В результате у вновь созданного объекта нет назначенного идентификатора, если он не указан, что заставляет PostgreSQL выдавать ошибку non_unique primary key
.
Как я могу убедиться, что уникальные идентификаторы создаются при вызове Image.objects.create()
?
Версия Django: 1.11.3
ОБНОВЛЕНИЕ: Я понял, что переопределенный метод save () тоже не вызывался.Оказывается, проблема была в том, что я вызывал метод save
модели в процессе миграции.Как указано в , этот пост методы пользовательской модели недоступны при переносе.Мне придется скопировать метод сохранения модели в файл миграции.