Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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)