У меня есть документ, который состоит из разделов, подразделов и предложений.
Section 1
Subsections 1.1, 1.2, 1.3
Clauses 1.1.1, 1.1.2... 1.2.1, 1.2.2...
Это модели, в которых есть поле «число» для хранения идентификатора, но это поле CharField из-за синтаксиса двойной точки в некоторых подразделах и предложениях, например ...
Clause 1.2.1
Если я хочу отсортировать подразделы, базовый алгоритм сортировки Django будет сортировать:
1.1
1.2
1.3
...
Но это становится проблематичным, когда у меня в группе более 9 подразделов или предложений, потому что сортировка дает мне:
1.1
1.10
1.11
1.2
1.3
...
Есть ли способ правильно упорядочить их в шаблоне, например:
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
1.10
1.11
Я мог бы преобразовать их в числа с плавающей точкой, а затем отсортировать их - но это не сработало бы для предложений.
models.py
class Section(models.Model):
number = models.CharField(max_length=2, unique=True)
name = models.CharField(max_length=150, unique=False)
descriptor = HTMLField(blank=True)
def __str__(self):
return u'%s %s' % (self.number, self.name)
...
class Subsection(models.Model):
number = models.CharField(max_length=5, unique=True)
name = models.CharField(max_length=150, unique=False)
descriptor = HTMLField(blank=True)
fundamental = models.BooleanField()
section = models.ForeignKey(Section, on_delete=models.DO_NOTHING)
def __str__(self):
return u'%s %s' % (self.number, self.name)
class Meta:
ordering = ["number"]
....
class Clause(models.Model):
number = models.CharField(max_length=8, unique=True)
requirements = HTMLField()
audit_part = models.CharField(max_length=64, choices=AUDIT_CHOICES)
subsection = models.ForeignKey(Subsection, on_delete=models.DO_NOTHING)
compliance_level = models.CharField(max_length=64, choices=LEVEL_CHOICES, blank=True, null=True)
def __str__(self):
return u'%s' % (self.number)
class Meta:
ordering = ["number"]
...