gpt4 book ai didi

python - 创建独特的 slug django

转载 作者:太空宇宙 更新时间:2023-11-04 10:29:29 24 4
gpt4 key购买 nike

我在使用 Django 模型创建独特的 slug 时遇到了问题。我想允许管理员用户从管理员的编辑页面更改 slug。当一个 slug 已经存在时,应该有“slug + _1”,“slug + _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)

最佳答案

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

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 将始终为 False,因为 slug_exits 是一个模型对象而 slug 是一个字符串。 这就是您收到错误的原因!
  3. 您在循环中执行了一个查询,这可能会导致对数据库的大量命中。

关于python - 创建独特的 slug django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27697939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com