kopia lustrzana https://github.com/rtts/django-simplecms
integrate numberedmodel into this repository
rodzic
196efe8bef
commit
d5bf5c8c06
|
@ -5,7 +5,50 @@ from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from ckeditor.fields import RichTextField
|
from ckeditor.fields import RichTextField
|
||||||
from embed_video.fields import EmbedVideoField
|
from embed_video.fields import EmbedVideoField
|
||||||
from numberedmodel.models import NumberedModel
|
|
||||||
|
# From https://github.com/JaapJoris/django-numberedmodel.git
|
||||||
|
class NumberedModel(models.Model):
|
||||||
|
def number_with_respect_to(self):
|
||||||
|
return self.__class__.objects.all()
|
||||||
|
|
||||||
|
def _renumber(self):
|
||||||
|
'''Renumbers the queryset while preserving the instance's number'''
|
||||||
|
|
||||||
|
queryset = self.number_with_respect_to()
|
||||||
|
field_name = self.__class__._meta.ordering[-1].lstrip('-')
|
||||||
|
this_nr = getattr(self, field_name)
|
||||||
|
if this_nr is None:
|
||||||
|
this_nr = len(queryset) + 1
|
||||||
|
|
||||||
|
# The algorithm: loop over the queryset and set each object's
|
||||||
|
# number to the counter. When an object's number equals the
|
||||||
|
# number of this instance, set this instance's number to the
|
||||||
|
# counter, increment the counter by 1, and finish the loop
|
||||||
|
counter = 1
|
||||||
|
inserted = False
|
||||||
|
for other in queryset.exclude(pk=self.pk):
|
||||||
|
other_nr = getattr(other, field_name)
|
||||||
|
if counter >= this_nr and not inserted:
|
||||||
|
setattr(self, field_name, counter)
|
||||||
|
inserted = True
|
||||||
|
counter += 1
|
||||||
|
if other_nr != counter:
|
||||||
|
setattr(other, field_name, counter)
|
||||||
|
super(NumberedModel, other).save()
|
||||||
|
counter += 1
|
||||||
|
if not inserted:
|
||||||
|
setattr(self, field_name, counter)
|
||||||
|
|
||||||
|
def save(self, *args, **kwargs):
|
||||||
|
self._renumber()
|
||||||
|
super(NumberedModel, self).save(*args, **kwargs)
|
||||||
|
|
||||||
|
def delete(self, *args, **kwargs):
|
||||||
|
super(NumberedModel, self).delete(*args, **kwargs)
|
||||||
|
self._renumber()
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
abstract = True
|
||||||
|
|
||||||
class Page(NumberedModel):
|
class Page(NumberedModel):
|
||||||
position = models.PositiveIntegerField(_('position'), blank=True)
|
position = models.PositiveIntegerField(_('position'), blank=True)
|
||||||
|
|
Ładowanie…
Reference in New Issue