Django:仅当帖子 ID 已存在时才将其添加到 slug

Bid*_*jhi 1 django django-models

这是我在 models.py 中生成 slug 的代码,

def save(self):
   self.slug = slugify(self.title)
   super(Post, self).save()
Run Code Online (Sandbox Code Playgroud)

我想检查该 slug 是否已存在于我的数据库中,然后仅将 id 添加到该 slug 中。

我现在能想到的唯一方法是通过这样做在每个 slug 中添加 id,

def save(self):
   super(Post, self).save()

   if not self.slug:
      self.slug = slugify(self.title) + "-" + str(self.id)
      self.save()
Run Code Online (Sandbox Code Playgroud)

问题是,它在所有 slugs 中添加了 id。

那么我如何检查由于相同标题而导致的 slug 是否已存在,然后仅将 id 添加到新的 slug 中?

Arp*_*Svt 5

您可以检查是否存在带有 slug 的帖子,然后您可以将 id 添加到 slug。

def save(self):
    # calling super so that the instance will get created and self.id will be accessible.
    super(Post, self).save()
    if not self.slug:
        slug = slugify(self.title)
        try:
            post_obj = Post.objects.get(slug=slug)
            slug += "-" + str(self.id)
        except Post.DoesNotExist:
            pass
        self.slug = slug
        self.save()
Run Code Online (Sandbox Code Playgroud)

虽然这段代码可以工作。但我更喜欢保留在后/预保存信号模型中创建 slug 的逻辑。