def save(self, *args, **kwargs): """ Set the initial ordering value. """ if self._order is None: lookup = self.with_respect_to() concrete_model = base_concrete_model(Orderable, self) self._order = concrete_model.objects.filter(**lookup).count() super(Orderable, self).save(*args, **kwargs)
def delete(self, *args, **kwargs): """ Update the ordering values for siblings. """ lookup = self.with_respect_to() lookup["_order__gte"] = self._order concrete_model = base_concrete_model(Orderable, self) after = concrete_model.objects.filter(**lookup) after.update(_order=models.F("_order") - 1) super(Orderable, self).delete(*args, **kwargs)
def save(self, *args, **kwargs): """ Create a unique slug from the title by appending an index. """ if not self.slug: # For custom content types, use the ``Page`` instance for slug # lookup. concrete_model = base_concrete_model(Slugged, self) self.slug = self.get_slug() i = 0 while True: if i > 0: if i > 1: self.slug = self.slug.rsplit("-", 1)[0] self.slug = "%s-%s" % (self.slug, i) qs = concrete_model.objects.all() if self.id is not None: qs = qs.exclude(id=self.id) try: qs.get(slug=self.slug) except ObjectDoesNotExist: break i += 1 super(Slugged, self).save(*args, **kwargs)
def save(self, *args, **kwargs): """ Create the description from the content if none given, and create a unique slug from the title by appending an index. """ if self.publish_date is None: # publish_date will be blank when a blog post is created from the # quick blog form in the admin dashboard. self.publish_date = datetime.now() if not self.description: for s in ("</p>", "\n", ". "): if s in self.content: self.description = self.content.split(s)[0] + s break else: self.description = truncatewords_html(self.content, 100) if not self.slug: # For custom content types, use the ``Page`` instance for slug # lookup. concrete_model = base_concrete_model(Displayable, self) self.slug = self.get_slug() i = 0 while True: if i > 0: if i > 1: self.slug = self.slug.rsplit("-", 1)[0] self.slug = "%s-%s" % (self.slug, i) qs = concrete_model.objects.all() if self.id is not None: qs = qs.exclude(id=self.id) try: qs.get(slug=self.slug) except ObjectDoesNotExist: break i += 1 super(Displayable, self).save(*args, **kwargs)