slugify関数を使用する必要があります。
>>> from django.template.defaultfilters import slugify
>>> slugify("b b b b")
u'b-b-b-b'
>>>
メソッドslugify
をオーバーライドすることで、自動的に呼び出すことができます。save
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
def save(self, *args, **kwargs):
self.s = slugify(self.q)
super(Test, self).save(*args, **kwargs)
q
上記により、フィールドを編集すると URL が変更され、リンクが壊れる可能性があることに注意してください。新しいオブジェクトを作成するときは、スラッグを 1 回だけ生成する方が望ましい場合があります。
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
def save(self, *args, **kwargs):
if not self.id:
# Newly created object, so set slug
self.s = slugify(self.q)
super(Test, self).save(*args, **kwargs)