Django:创建一个自定义Slug

时间:2018-04-15 19:01:00

标签: python django

这就是我在django应用程序中添加slug的方式,

class Question(models.Model):
    question_text = models.CharField(max_length=250)
    slug = models.SlugField(max_length=255, unique=True)

    def _get_unique_slug(self):
        slug = slugify(self.question_text)
        unique_slug = slug
        num = 1
        while Question.objects.filter(slug=unique_slug).exists():
            unique_slug = '{}-{}'.format(slug, num)
            num += 1

        if unique_slug == '':
        # then simply add an existing number to unique_slug

        return unique_slug

        def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = self._get_unique_slug()
        return super(Question, self).save()

问题是,如果slug是'',那么我想自动添加数字1,2,3 ...... n

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以将您的功能重写为:

def _get_unique_slug(self):
    unique_slug = slug = slugify(self.question_text)
    empty = False if unique_slug else True
    unique_slug = unique_slug or '1'
    for x in itertools.count(1):
        if not Question.objects.filter(slug=unique_slug).exists():
            break
        unique_slug = '{}'.format(x) if empty else '{}-{}'.format(slug, x)

在这里,您可以增加计数并检查数据库,直到找到唯一的免费slug。