版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
由于不能使用中文作为slug,使用将中文转换为拼音其实没什么意义,还不如直接用数字来表示slug
选择一个model.py,然后
import random
class Category(models.Model):
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True, unique=True,blank=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if self.slug and int(self.slug) <= 3:
slug = (random.randint(1000000000000000000000000000, 900000000000000000000000000000000))
self.slug = str(slug)
super(Post, self).save(*args, **kwargs)
设置了slug为空,否则在管理员界面添加对象的时候会强制填写slug值,很麻烦
然后重写save(),用if判断slug是否有值,并且判断是否已经填充过值了,避免slug反复填充更换
admin.py下
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
list_display = ('title', 'author', 'publish', 'slug'
自动填充slug的代码例如prepopulated_fields = {'slug': ('name',)}就可以省略了,因为我们已经重写了save()函数
现在重写在管理台添加新的对象就会自动生成数字的slug了