我使用django模型创建独特的slugs有问题。我想允许管理员用户更改管理员编辑页面中的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)
答案 0 :(得分:4)
试试这个。我自己没有测试过。但它应该给你这个想法。
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)
代码中有三个问题。
else
表示self.id
或self.slug
不是空白。因此,如果self.id
不为空且self.slug
为空,则self.slug
将无法获取值。slug_exits == slug
将始终为False,因为slug_exits
是Model对象,slug
是字符串。 这就是您收到错误的原因!