I'm trying to integrate a custom method on a Django model
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True)
title = models.CharField(max_length=200)
text = MarkdownField()
slug = models.SlugField(unique=True, blank=True)
created = models.DateTimeField(auto_now_add=True)
published_date = models.DateTimeField(blank=True, null=True)
def generate_unique_slug(self):
slug = self._meta.get_field('slug')
max_length = slug.max_length
slug = orig = slugify(self.title)[:max_length]
for x in itertools.count(1):
if not Post.objects.filter(slug=slug).exists():
break
# Truncate the original slug dynamically. Minus 1 for the hyphen.
slug = "%s-%d" % (orig[:max_length - len(str(x)) - 1], x)
def publish(self):
self.published_date = timezone.now()
self.generate_unique_slug()
self.save()
When called from "publish", "generate_unique_slug" doesn't work. For example, I'll do this from terminal
>>> p = Post(title="Title Example", text="Text example")
>>> p.publish()
>>> p.title
'Title Example'
>>> p.published_date
datetime.datetime(2016, 6, 18, 14, 45, 12, 710452, tzinfo=<UTC>)
>>> p.slug
u''
I've also tried this
>>> p.generate_unique_slug()
>>> p.slug
u''
What am I doing wrong?