在django中,为什么我创建帖子时不会自动生成我的slug

时间:2016-03-22 20:26:28

标签: django-forms

我有一个连接到我的模型的表单。我想保存它,但我收到一个错误,让我知道slu field场不满意。所以在我的表格中我添加了slug并从我的标题手动创建了一个slug并且它有效。我的admin.py

中已经有了这个
 prepopulated_fields = {"slug": ("title",)}

那么为什么这不会自动发生?

1 个答案:

答案 0 :(得分:0)

我在审核了其他代码之后想出来了

from django.db.models.signals import pre_save
from django.utils.text import slugify

然后这样做

def create_slug(instance, new_slug=None):
    slug = slugify(instance.title)
    if new_slug is not None:
        slug = new_slug
    qs = Post.objects.filter(slug=slug).order_by("-id")
    exists = qs.exists()
    if exists:
        new_slug = "%s-%s" % (slug, qs.first().id)
        return create_slug(instance, new_slug=new_slug)
    return slug


def pre_save_post_receiver(sender, instance, *args, **kwargs):
    if not instance.slug:
        instance.slug = create_slug(instance)


pre_save.connect(pre_save_post_receiver, sender=Post)

然后生成了slug,我没有必须手动添加它或在视图中将其重击