创造独特的鼻涕虫

2024-04-25 04:00:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在使用django模型创建独特的slug时遇到了一个问题。我想允许管理员用户从管理员的编辑页面更改slug。当一个slug已经存在时,应该有“slug+\u 1”、“slug+\u 2”等。另外,当一个新的页面被创建并且没有slug时,slug应该是页面的标题。我有这段代码,但出于某些原因,当我添加一个已经存在的Slug页面时,管理员总是说“带有这个Slug的页面已经存在”。希望有人能帮我

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)

Tags: selfifsave管理员existscounterpagenot
1条回答
网友
1楼 · 发布于 2024-04-25 04:00:28

试试这个。我没有亲自测试。但它应该给你一个想法。在

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.id或{}不是空的。因此,如果self.id不为空,self.slug为空,self.slug将不会得到值。在
  2. slug_exits == slug将始终为False,因为slug_exits是一个模型对象,slug是一个字符串。这就是你得到错误的原因!
  3. 您在循环中执行了一个查询,这可能会对数据库造成大量的命中。在

相关问题 更多 >