Django:仅在已存在的帖子中添加帖子ID

时间:2019-01-29 06:37:25

标签: django django-models

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

def save(self):
   self.slug = slugify(self.title)
   super(Post, self).save()

我要检查数据库中是否已存在该子段,然后仅将ID添加到该子段中。

我现在唯一想到的方法是在每个子段中添加ID

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

   if not self.slug:
      self.slug = slugify(self.title) + "-" + str(self.id)
      self.save()

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

那么我该如何检查由于相同的标题而导致的子弹不存在,然后仅将ID添加到新的子弹中?

1 个答案:

答案 0 :(得分:4)

您可以检查是否存在已存在子弹的帖子,然后可以向该子弹添加ID。

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()

尽管此代码将起作用。但是我更喜欢在Post / Pre Save Singal模型中保留创建子弹的逻辑。