【发布时间】:2017-09-27 20:35:31
【问题描述】:
我正在尝试从人名中创建独特的 slug,这将有明显的重复。我的想法是将 id 作为唯一标识符添加到 slug 中。问题是在保存完成之前不会生成唯一 ID。
这是我尝试过的:
def save(self, *args, **kwargs):
if getattr(self, 'name', True):
if not self.pk:
matching_slugs = Entity.objects.filter(slug=slugify(self.name))
print matching_slugs
if len(matching_slugs) > 0:
self.slug=slugify(self.name+' temp')
elif len(matching_slugs) == 0:
self.slug=slugify(self.name)
super(Entity, self).save(*args, **kwargs)
self.slug=slugify(self.name+' '+str(self.id))
self.save()
我得到错误:
在 cmp 中超出最大递归深度
我认为这不是最好的方法。
如何在保存时使名称唯一?
【问题讨论】:
-
删除
self.save() -
但是为什么你不使用docs.djangoproject.com/en/1.11/ref/models/fields/#slugfield 和
unique=True -
您是特别需要 slug 为
name+pk还是只需要一个独特的 slug?如果你告诉我们你想如何使用这个 slug 可能会有所帮助。 -
@AndMar 是正确的
self.save()是递归错误的原因,但看起来你想使用self.id直到对象第一次保存才设置所以我可以看看你为什么要保存它两次。这篇文章可能有助于保存一个对象两次:stackoverflow.com/a/14236946/1051031
标签: python django django-models