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

时间:2017-09-27 20:35:32

标签: python django django-models

我正在尝试从人名创建独特的slu ,,这将有明显的重复。我的想法是将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中超出了最大递归深度

我认为这不是最好的方法。

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

2 个答案:

答案 0 :(得分:2)

可能你可以使用简单的结构吗?:

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)

答案 1 :(得分:0)

我将save()更改为:

    super(Entity, self).save(*args, **kwargs)
    self.slug=slugify(self.name+' '+str(self.id))
    super(Entity, self).save(*args, **kwargs)