首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django -生成默认slug

Django -生成默认slug
EN

Stack Overflow用户
提问于 2011-02-03 17:53:54
回答 5查看 13K关注 0票数 12

我想为我的模型生成一个随机的段塞,但不设置"blank=True“(因为我想在以后通过验证来强制执行它)。

我在想我能不能做这样的事:

代码语言:javascript
复制
slug = models.SlugField(unique=True, default=some_method(), verbose_name='URL Slug')

其中some_method是一种生成随机插件的方法?我试过上面的代码,但它不能工作:(

我想要做的是生成一个独特的插件(unique_slugify?)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-02-03 18:01:26

您可以覆盖模型保存方法,以便在创建新实体时动态生成插件。类似于:

代码语言:javascript
复制
if not self.pk:
    self.slug = ''.join(random.sample(string.ascii_lowercase, 10))

您可以这样做,但这样做不是很好,更好的做法是让slug成为对象名称的确定性slugified版本。

票数 9
EN

Stack Overflow用户

发布于 2011-02-03 20:14:28

如果您希望使用在同一模型中的某个其他字段中输入的条目自动生成插件,则可以使用此选项。

代码语言:javascript
复制
from django_extensions.db.fields import AutoSlugField

slug = AutoSlugField(_('slug'), max_length=50, unique=True, populate_from=('name',))

  • populate_from是模型中将自动生成slug

的字段

票数 26
EN

Stack Overflow用户

发布于 2011-09-25 22:11:54

default必须是值或可调用的。

所以是default=some_method,不是default=some_method()。下面是一个示例:

代码语言:javascript
复制
from django.contrib.auth.models import UserManager

def randomString():
    um = UserManager()
    return( um.make_random_password( length=25 ) )

class Foo( models.Model ):
    code = models.CharField( max_length=25, default=randomString )
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4884584

复制
相关文章

相似问题

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