def save(self, *args, **kwargs):
        if not self.alias and self.page_type.url_pattern:
            self.alias = self.page_type.url_pattern\
                .replace('[node:title]', transliterate(self.title, False, True))
            regex = re.compile('\[node:(created|changed):(\w\W\w\W\w)\]')
            dates = regex.search(self.alias)
            if dates:
                date_field = self.created if dates.group(1) == 'created' else self.changed
                date_field = DateFormat(date_field).format(dates.group(2))
                self.alias = self.alias.replace(dates.group(0), date_field)
        super(Node, self).save(*args, **kwargs)
        if self.alias.find('[node:id]') >= 0:
            self.alias = self.alias.replace('[node:id]', str(self.id))
            Node.objects.filter(id=self.id).update(alias=self.alias)
        if self.alias and Node.objects.filter(alias=self.alias).filter(language=self.language).count() > 1:
            self.alias = '%s/%d' % (self.alias, self.id)
            Node.objects.filter(id=self.id).update(alias=self.alias)
Override save method to format alias
dataset/ETHPy150Open Wtower/django-ninecms/ninecms/models.py/Node.save