это вопрос дизайна.Зарезервируйте модели в попытке поймать
Предположим, что организация с именем и кодом
class Organisation(models.Model):
"""
Class to manage Organisations.
"""
name = models.CharField(_('Name'), max_length=50)
code = models.CharField(_('Code'),
max_length=8,
editable=False,
unique=True)
Чтобы избежать проблем кода, я использую этот метод сохранения:
def save(self, *args, **kwargs):
""" override save method to add specific values """
if self.pk is None:
self.code = strftime('%y%m')+str(uuid4())[:4]
try:
super(Organisation, self).save(*args, **kwargs)
except IntegrityError:
self.code = strftime('%y%m')+str(uuid4())[:4]
super(Organisation, self).save(*args, **kwargs)
Как вы можете себе представить, этот код не работает, это плохой код, но я не знаю, как это сделать: '( EDIT: формат кода является ограничением, я не могу его изменить
он это именно то, что я сделал с тех пор, как я разместил этот вопрос :) Моя основная проблема - я ненавижу использование в то время как на велосипедах, потому что у нас нет контроля, так что я боюсь бесконечных боев. Я думаю, у меня нет выбора здесь, спасибо за ваш конкретный ответ :) – billyJoe
Если вы хотите уникальный идентификатор, основанный на времени, вы также можете посмотреть 'uuid1' –
Вы можете избежать бесконечного цикла while с большим циклом цикла – arocks