创建独特的蛞蝓的Django(create unique slug django)

2019-10-21 12:02发布

我有一个创建一个使用Django模型独特蛞蝓的一个问题。 我希望允许管理员用户蛞蝓从编辑页的管理员更改。 当塞已经存在应该有“塞+ _1”,“塞+ _2”等也创造了新的一页,也没有考虑到塞应该是网页标题塞时。 我有这样的代码,但由于某些原因,管理口口声声说“页面使用此弹头已经存在。” 当我添加一个页面,其中一个已存在的鼻涕虫。 希望有人能帮助我

def save(self, *args, **kwargs):
    if not self.id and not self.slug:
        self.slug = slugify(self.page_title)

    else:
        self.slug = slugify(self.slug)

    slug_exists = True
    counter = 1
    slug = self.slug
    while slug_exists:
        try:
            slug_exits = Page.objects.get(slug=slug)
            if slug_exits == slug:
                slug = self.slug + '_' + str(counter)
                counter += 1
        except:
            self.slug = slug
            break
    super(Page, self).save(*args, **kwargs)

Answer 1:

尝试这个。 没有测试它自己。 但它应该给你的想法。

import re
def save(self, *args, **kwargs):
    if not self.id: # Create
        if not self.slug: # slug is blank
            self.slug = slugify(self.page_title)
        else: # slug is not blank
            self.slug = slugify(self.slug)
    else: # Update
        self.slug = slugify(self.slug)

    qsSimilarName = Page.objects.filter(slug__startswith='self.slug')

    if qsSimilarName.count() > 0:
        seqs = []
        for qs in qsSimilarName:
            seq = re.findall(r'{0:s}_(\d+)'.format(self.slug), qs.slug)
            if seq: seqs.append(int(seq[0]))

        if seqs: self.slug = '{0:s}_{1:d}'.format(self.slug, max(seqs)+1)

    super(Page, self).save(*args, **kwargs)

三个问题在你的代码。

  1. 第一else意味着要么self.idself.slug不是空白。 所以,如果self.id不是空白, self.slug是空白, self.slug不会得到一个值。
  2. slug_exits == slug将永远是假的,因为slug_exits是一个Model对象和slug是一个字符串。 这就是为什么你的错误!
  3. 你做的循环查询,这可能会导致大量的点击到数据库的。


文章来源: create unique slug django