1 from django
.db
import models
3 class Orderable(models
.Model
):
5 """Add extra field and default ordering column for and inline orderable model"""
7 inline_ordering_position
= models
.IntegerField(blank
= True,
13 ordering
= ('inline_ordering_position',)
15 def save(self
, force_insert
=False, force_update
=False, using
=None):
16 """Calculate position (max+1) for new records"""
17 if not self
.inline_ordering_position
:
18 max = self
.__class__
.objects
.filter().aggregate(models
.Max('inline_ordering_position'))
20 self
.inline_ordering_position
= max['inline_ordering_position__max'] + 1
22 self
.inline_ordering_position
= 1
23 return super(Orderable
, self
).save(force_insert
=force_insert
, force_update
=force_update
, using
=using
)