1

根据 ID 创建记录标题和粗节的通用方法是什么?我在这里与 django-photologue 合作。我想根据 PK 保存带有标题和 slug 的记录。一般问题是在记录保存到数据库之前我无法获得 PK。另一方面,没有标题和slug我无法保存它。

这种问题有什么常见的解决方案?

4

3 回答 3

1

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

有一个实现AutoSlugFielddjango-command-extensions的一部分。

于 2009-10-08T11:18:52.363 回答
1

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

以 Stackoverflow 为例:根据 PK ID 创建 Title/Slug

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

我不是说蛞蝓不好,也不是说保存蛞蝓总是不好的。将它们保存在数据库中有很多正当理由,但是您需要考虑一下您在做什么。

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

于 2009-10-08T12:34:04.210 回答
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应用程序。

于 2009-10-08T12:15:39.097 回答