Django 有一个unique_for_date属性,您可以在将 SlugField 添加到模型时设置。这会导致 slug 仅对于您指定的字段的 Date 是唯一的:
class Example(models.Model):
title = models.CharField()
slug = models.SlugField(unique_for_date='publish')
publish = models.DateTimeField()
为非日期时间字段(如 ForeignKey)实现相同功能的最佳方法是什么?理想情况下,我想做这样的事情:
class Example(models.Model):
title = models.CharField()
slug = models.SlugField(unique_for='category')
category = models.ForeignKey(Category)
这样我可以创建以下网址:
/example/category-one/slug
/example/category-two/slug
/example/category-two/slug <--Rejected as duplicate
到目前为止我的想法:
将 slug 和 categoryid 的唯一索引添加到表中。这需要 Django 之外的代码。当插入/更新失败时,内置管理员会正确处理这个问题吗?
覆盖模型的保存并添加我自己的验证,如果存在重复则抛出错误。我知道这会起作用,但它似乎不是很干燥。
创建一个从基础继承的新 slug 字段并在那里添加 unique_for 功能。这似乎是最好的方法,但我查看了核心的 unique_for_date 代码,扩展它似乎不是很直观。
关于最佳方式的任何想法、建议或意见?