根据PK ID创建标题/ Slug

时间:2009-10-08 11:14:29

标签: python django django-profiles

基于ID创建唱片名称和竹节的通用方法是什么?我在这里使用django-photologue。我想根据PK保存带有标题和slug的记录。一般的问题是,在将记录保存到数据库之前,我无法获取PK。另一方面,我无法保存它没有标题和slug。

这种问题有哪些常见的解决方案?

3 个答案:

答案 0 :(得分:1)

通常,您根本不使用主键。如果您只关心自动生成独特的slu((这是我可以看到你做的事情的唯一原因),那么你想要一个AutoSlugField,它通过增加一个附加的数字来创建一个独特的slug在slug上直到它是独特的。

AutoSlugField的实施是django-command-extensions的一部分。

答案 1 :(得分:1)

如果您的URI应该看起来像"example.com/${obj.id}-${sluggify( obj.title )}",那么在您使用它们时生成这些uri 。此uri不包含数据库中已有的数据,因此请勿再次添加。该slug的唯一目的是让人们和搜索引擎看起来更好看。

以Stackoverflow为例:Creating Title / Slug based on PK ID

如果您只想通过slug选择,它必须是主键,唯一且不可变。你应该知道,不需要另一个PK,通常的id列。

我不认为slu is是坏的,也不是说节约的slu is总是坏的。将它们保存在数据库中有许多正当理由,但是您需要思考关于您正在做什么。

另一方面,通过他们的PK(并忽略slu)来选择数据不需要考虑,所以这应该是默认的方式。

答案 2 :(得分:0)

要根据记录ID命名文件,您有以下几种选择:

a)尝试预测ID:

max_pk = self.__class__.objects.aggregate(max_pk=Max('pk'))['max_pk'] or 0
predicted_id = max_pk+1

b)当ID已知时,在post_save中重命名文件。

您还可以使用md5哈希或随机字符串生成唯一的文件名。

顺便说一下,有单独的django-autoslug应用。