我试图在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'

我还在等呢。


当前回答

您可以查看SlugField的文档,以更加描述性的方式了解它。

其他回答

在你的管理类中使用prepopulated_fields:

class ArticleAdmin(admin.ModelAdmin):
    prepopulated_fields = {"slug": ("title",)}

admin.site.register(Article, ArticleAdmin)

如果您不想将slugfield设置为不可编辑,那么我相信您将希望将Null和Blank属性设置为False。否则,当你试图在管理中保存时,你会得到一个错误。

所以对上面例子的修改如下:

class test(models.Model):
    q = models.CharField(max_length=30)
    s = models.SlugField(null=True, blank=True) # Allow blank submission in admin.

    def save(self):
        if not self.id:
            self.s = slugify(self.q)

        super(test, self).save()

在大多数情况下,slug不应该改变,所以你真的只想在第一次保存时计算它:

class Test(models.Model):
    q = models.CharField(max_length=30)
    s = models.SlugField(editable=False) # hide from admin

    def save(self):
        if not self.id:
            self.s = slugify(self.q)

        super(Test, self).save()

对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错误(意外参数)。

您可以查看SlugField的文档,以更加描述性的方式了解它。