我试图在Django中创建一个SlugField。
我创建了这个简单的模型:
from django.db import models
class Test(models.Model):
q = models.CharField(max_length=30)
s = models.SlugField()
然后我这样做:
>>> from mysite.books.models import Test
>>> t=Test(q="aa a a a", s="b b b b")
>>> t.s
'b b b b'
>>> t.save()
>>> t.s
'b b b b'
我还在等呢。
您将需要使用slugify函数。
>>> from django.template.defaultfilters import slugify
>>> slugify("b b b b")
u'b-b-b-b'
>>>
你可以通过覆盖save方法自动调用slugify:
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更改,这可能导致链接断开。当你创建一个新对象时,最好只生成一次slug:
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)
对Thepeer的回答做一个小修正:要在模型类中覆盖save()函数,最好给它添加参数:
from django.utils.text import slugify
def save(self, *args, **kwargs):
if not self.id:
self.s = slugify(self.q)
super(test, self).save(*args, **kwargs)
否则,test.objects。Create (q="blah blah blah")将导致force_insert错误(意外参数)。