如果你想更新 slugs 而不破坏旧的 url,你可以分离 slugs 并链接列表视图中的最新内容,应该这样做:
class Article(models.Model):
title = models.CharField() # etc
class ArticleSlug(models.Model):
article = models.ForeignKey(Article)
slug = models.SlugField(unique=True)
date_created = models.DateTime(auto_now_add=True, editable=False)
class Meta:
get_latest_by = "date_created"
在您的征募模板中,您可以简单地调用最新的 slug,但您可能还希望在 url 中有一些 M/Y/D 层次结构
<a href="/news/articles/{{ article.articleslug_set.latest }}/">{{ article.title }}</a>
如果您的网站获得大量流量,您可能需要添加一个 celery 任务来检索最新的 slug 并不时将其复制到文章模型上的字段中。这将为您节省一些 SQL JOIN。