Skip to main content
 首页 » 编程设计

python之在 Django 模型自定义保存中使用唯一 ID

2024年08月19日28虾米哥

我正在尝试根据人名创建独特的 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() 

我得到错误:

maximum recursion depth exceeded in 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)