Django: Я хочу создать самогенерирующийся код на основе предыдущих записей и порядкового номера

Я ноб в кодинге и пишу сайт на Django для управления проектами и задачами, и я хочу генерировать поле кода проекта в модели 'Project' автоматически на основе предыдущих записей.

Я думал сделать 'код проекта' CharField, который должен иметь 3 части: 'код отдела', внешний ключ модели 'Отдел' с собственными полями 'имя' и 'код', из которого мне нужно только 2-3 буквенное значение кода, код 'года', основанный на дате начала проекта, используя последние 2 цифры года даты, и код последовательности, который должен быть последней записью, основанной на вышеуказанных фильтрах +1.

Поле кода проекта должно выглядеть следующим образом: DDD-YY-SS, где DDD - код отдела, YY - двузначный номер года и SS - порядковый номер.

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

    def save(self, *args, **kwargs):
        dpt = str(self.department.code)
        project_date = self.projectdate
        yy = str(project_date.year)[-2:]
        filter_kw = '{}-{}-'.format(dpt, yy)

        lastrec = ProjectModel.objects.filter(project_code__startswith = filter_kw).last()
        
        if lastrec == None:
            lastrec = '00'
        else:
            lastrec = str(lastrec.project_code)[-2:]
 
        newnum = "{:02d}".format(int(lastrec)+1)
        self.code = '{}-{}'.format(filter_kw, str(newnum))

        super(ProjectModel, self).save(*args, **kwargs)

Но мне кажется, что этот код... небрежный? Мне кажется, что нужно использовать слишком много вспомогательных элементов, иначе он просто не будет работать. Есть ли лучший способ сделать это? Должен ли я включить функцию генерации в модель или мне следует перенести это в функции View или tag в шаблонах?

Большое спасибо. У меня голова теперь как лапша.

Вернуться на верх