如何从中文文本中生成slug?

时间:2016-04-08 11:13:25

标签: django django-admin

我想让我的admin.py读中文,但我不知道怎么办。这就是我所拥有的。

  

admin.py

from django.contrib import admin
from collection.models import Thing


class ThingAdmin(admin.ModelAdmin):
    model = Thing
    list_display = ('name', 'description',)
    prepopulated_fields = {'slug': ('name',)}


admin.site.register(Thing, ThingAdmin)
  

models.py

from django.db import models

class Thing(models.Model):
    name = models.CharField(max_length=255)
    description = models.TextField()
    slug = models.SlugField(unique=True)

现在我可以用英文键入它并且slug会正确生成,但是当我在中文中尝试时,slug是空白的。 enter image description here enter image description here

任何人都知道怎么做?谢谢!

1 个答案:

答案 0 :(得分:0)

我刚才有类似的问题。您需要将中文转换为可以存储在SlugField中的文本 包括unidecode和可选的slugify

from unidecode import unidecode
from django.template.defaultfilters import slugify

并覆盖保存为以下内容:

class ThingAdmin(admin.ModelAdmin):
    model = Thing
    list_display = ('name', 'description',)
    prepopulated_fields = {'slug': ('name',)}

    def save(self, *args, **kwargs):
        self.slug = slugify(unidecode(self.name))
        return super(ThingAdmin, self).save(*args, **kwargs)

您还需要确保slug始终是唯一的,我在您的代码中没有看到 它会将名称투자解码为此slug tuja等。