首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据主键ID创建标题/插件

根据主键ID创建标题/插件
EN

Stack Overflow用户
提问于 2009-10-08 11:14:29
回答 3查看 959关注 0票数 1

基于ID创建记录标题和slub的通用方法是什么?我正在使用django-photologue。我想保存一个基于PK的标题和slug的记录。一般的问题是我不能得到PK,直到记录被保存到数据库中。另一方面,如果没有title和slug,我不能保存它。

这类问题的常见解决方案是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-08 12:34:04

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

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

如果您只想按插件进行选择,则它必须是主键、唯一且不可变。您应该知道,不需要另一个PK,即通常的id列。

我并不是说弹头是不好的,也不是说保存弹头总是不好。有许多有效的理由将它们保存在数据库中,但是您需要考虑您正在做什么。

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

票数 1
EN

Stack Overflow用户

发布于 2009-10-08 11:18:52

通常,您根本不使用主键。如果您只关心自动生成唯一的插件(这是我看到的唯一原因),那么您需要一个AutoSlugField,它通过在插件上增加一个附加的数字直到它是唯一的,从而创建一个唯一的插件。

作为django-command-extensions的一部分,有一个AutoSlugField的实现。

票数 1
EN

Stack Overflow用户

发布于 2009-10-08 12:15:39

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

a)尝试预测ID:

代码语言:javascript
复制
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应用程序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1537149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档