Python 在django模型自定义保存中使用唯一id
我正在尝试从人名中创建唯一的slug,这将有明显的重复。我的想法是将id作为唯一标识符添加到slug中。问题在于,在保存完成之前,不会生成唯一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
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)