Сгенерировать уникальный восходящий числовой идентификатор в поле модели django - PullRequest
0 голосов
/ 17 февраля 2020
Class Car(models.Model):
     type = models.CharField('Type', max_length=100)
     code = models.CharField('Code', max_length=10, blank=True, null=True)

Учитывая, что я хочу составить список автомобилей в зависимости от их типов. У меня есть модель и поля, подобные приведенному выше коду, я хочу, чтобы код уникально увеличивался в зависимости от типа автомобиля. Например, если экземпляр автомобиля был создан с полем типа «HD», то код будет «HD-0000001». Следующая модель, созданная также с типом HD, будет HD-0000002 и так далее, и так далее. Если указан другой тип, он будет сохранять как «тип» + «последний сохраненный номер + 1».

Я знаю, что должен что-то делать в функции save (), но я не могу понять, как сделать его уникальным для разных типов.

Любые предложения будут по достоинству оценены. Спасибо!

1 Ответ

0 голосов
/ 17 февраля 2020

возможно, вы могли бы написать свой класс следующим образом:

Class Car(models.Model):
    type = models.CharField('Type', max_length=100)
    code = models.IntegerField('Code', default=-1)

    def save(self, *args, **kw):
        if self.code == -1:
            max_code=Car.objects.filter(type=self.type).aggregate(max_code=Max('code'))
            self.code = max_code.get('max_code',0)+1 if max_code else 1
        return super(Car, self).save(*args, **kw)

    class Meta:
        unique_together = ('type', 'code')

Таким образом, вы никогда не должны сохранять код атрибута, потому что перед первым сохранением объекта получите последний номер кода для его типа и установите код self ' 'со следующим значением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...