基于ID创建记录标题和slub的通用方法是什么?我正在使用django-photologue。我想保存一个基于PK的标题和slug的记录。一般的问题是我不能得到PK,直到记录被保存到数据库中。另一方面,如果没有title和slug,我不能保存它。
这类问题的常见解决方案是什么?
发布于 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)不需要思考,所以这应该是默认的方法。
发布于 2009-10-08 11:18:52
通常,您根本不使用主键。如果您只关心自动生成唯一的插件(这是我看到的唯一原因),那么您需要一个AutoSlugField,它通过在插件上增加一个附加的数字直到它是唯一的,从而创建一个唯一的插件。
作为django-command-extensions的一部分,有一个AutoSlugField的实现。
发布于 2009-10-08 12:15:39
要根据记录ID命名文件,您有以下几个选项:
a)尝试预测ID:
max_pk = self.__class__.objects.aggregate(max_pk=Max('pk'))['max_pk'] or 0
predicted_id = max_pk+1b)当ID已知时,在post_save中重命名文件。
您还可以使用md5散列或随机字符串来生成唯一的文件名。
顺便说一句,有单独的django-autoslug应用程序。
https://stackoverflow.com/questions/1537149
复制相似问题