2017-09-27 197 views
0

我试图创建者的名字,这将有明显的重复独特的蛞蝓。我的想法是将ID添加到蛞蝓作为唯一标识符。问题是直到保存完成后才会生成唯一标识。使用唯一的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

我在想这是不是要做到这一点的最好办法。

我怎样才能让名字上保存独特之处?

+0

只要删除'self.save()' – AndMar

+0

但是,为什么你做不使用https://docs.djangoproject.com/en/1.11/ref/models/fields/#slugfield与'独特= TRUE' – AndMar

+0

你特别需要蛞蝓是'name' +'pk'或者你只是需要一个独特的slu??如果你告诉我们你是怎么想用这个金属块它可以帮助。 – petroleyum

回答

1

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

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

我改变保存()是:

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