Python 在django模型自定义保存中使用唯一id

Python 在django模型自定义保存中使用唯一id,python,django,django-models,Python,Django,Django Models,我正在尝试从人名中创建唯一的slug,这将有明显的重复。我的想法是将id作为唯一标识符添加到slug中。问题在于,在保存完成之前,不会生成唯一id 这就是我所尝试的: def save(self, *args, **kwargs): if getattr(self, 'name', True): if not self.pk: matching_slugs = Entity.objects.filter(slug=slu

我正在尝试从人名中创建唯一的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中超出了最大递归深度

我认为这不是最好的方法


如何在保存时使名称唯一?

可能您可以使用简单的构造:

import uuid


def save(self, *args, **kwargs):
    if not self.slug:
          self.slug = "%s.%s" % (self.name , uuid.uuid4())
    super(Entity, self).save(*args, **kwargs)
我将save()更改为:


只需删除
self.save()
但为什么不与
unique=True
一起使用,您是特别需要将slug设置为
name
+
pk
还是只需要一个唯一的slug?如果您告诉我们如何使用这个slug,可能会有所帮助。@AndMar说得对,
self.save()
是递归错误的原因,但您似乎想使用
self.id
,它在对象首次保存之前不会设置,因此我可以看出您为什么要保存它两次。这篇文章可能有助于保存对象两次:谢谢。它救了我一命,另有目的。问得好,回答得好。:)
    super(Entity, self).save(*args, **kwargs)
    self.slug=slugify(self.name+' '+str(self.id))
    super(Entity, self).save(*args, **kwargs)