我有一个连接到我的模型的表单。我想保存它,但我收到一个错误,让我知道slu field场不满意。所以在我的表格中我添加了slug并从我的标题手动创建了一个slug并且它有效。我的admin.py
中已经有了这个 prepopulated_fields = {"slug": ("title",)}
那么为什么这不会自动发生?
答案 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,我没有必须手动添加它或在视图中将其重击