Han*_*pan 9 django django-models
我想为我的模型生成一个随机slug,但没有设置"blank = True"(因为我想稍后通过验证强制执行.)
我想知道我是否可以这样做:
slug = models.SlugField(unique=True, default=some_method(), verbose_name='URL Slug')
some_method是一种产生随机slug的方法?我已经尝试了上面的代码,它不起作用:(
我想做的是生成一个独特的slug(unique_slugify?)
Pra*_*eek 22
如果希望使用同一模型中其他字段中的条目(slug所在的位置)创建条目,则可以使用此方法.
from django_extensions.db.fields import AutoSlugField
slug = AutoSlugField(_('slug'), max_length=50, unique=True, populate_from=('name',))
populate_from 是模型中将自动生成slug的字段您可以覆盖模型save-method,以便在创建新实体时即时生成slug.就像是:
if not self.pk:
    self.slug = ''.join(random.sample(string.ascii_lowercase, 10))
你可以这样做,但它不是很好,更好的是让slug成为对象名称的确定性的slugified版本.
小智 5
default必须是一个值或一个可调用的。
所以是default=some_method,不是default=some_method()。这是一个例子:
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 )