【发布时间】:2021-10-03 13:06:13
【问题描述】:
我正在创建一个博客,我需要让 slug 自动将 URL 作为您打开的每篇文章的标题,而我每次都必须手动完成
【问题讨论】:
我正在创建一个博客,我需要让 slug 自动将 URL 作为您打开的每篇文章的标题,而我每次都必须手动完成
【问题讨论】:
方法有很多种,我已经解释了几个简单易行的
您可以通过 admin.py 添加
class ModelAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("your_field_name",)}
admin.site.register(Model, ModelAdmin)
你可以在模型保存方法上使用 slugify
例子
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()
【讨论】:
如果您想查看管理表单中自动填充的字段。
from django.contrib import admin
from .models import Post
@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
# This will be populating the slug field as you enter the title in the post form on admin site
prepopulated_fields = {'slug': ['title', ]}
在管理站点之外,只需确保覆盖 post model 上的保存方法...
from django.db import models
from django.template.defaultfilters import slugify
Class Post(models.Model):
title = models.CharField(max_length=50)
slug = models.SlugField(max_length=100)
def save(self, *args, **kwargs):
if self.title:
self.slug = slugify(self.title)
super(Post, self).save(*args, **kwargs)
这应该可以有效地完成这项工作。
【讨论】:
unique_for_date='publish'