django 自定义slug 更换为随机数字

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/u013251692/article/details/102761714

由于不能使用中文作为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了

猜你喜欢

转载自blog.csdn.net/u013251692/article/details/102761714