Django имеет свойство unique_for_date , которое вы можете установить при добавлении SlugField в вашу модель. Это делает слаг уникальным только для указанной вами даты:
class Example(models.Model):
title = models.CharField()
slug = models.SlugField(unique_for_date='publish')
publish = models.DateTimeField()
Каков наилучший способ достижения такой же функциональности для поля, не относящегося к DateTime, как ForeignKey? В идеале я хочу сделать что-то вроде этого:
class Example(models.Model):
title = models.CharField()
slug = models.SlugField(unique_for='category')
category = models.ForeignKey(Category)
Таким образом, я мог бы создать следующие URL:
/example/category-one/slug
/example/category-two/slug
/example/category-two/slug <--Rejected as duplicate
Мои идеи пока:
Добавьте в таблицу уникальный индекс для слаг и categoryid. Для этого требуется код вне Django. И будет ли встроенный администратор обрабатывать это правильно, когда вставка / обновление завершится неудачно?
Переопределите сохранение для модели и добавьте мою собственную проверку, выдавая ошибку, если дубликат существует. Я знаю, что это будет работать, но это не выглядит очень СУХОЙ.
Создайте новое поле слагов, унаследованное от базы, и добавьте туда функциональность unique_for. Это кажется лучшим способом, но я просмотрел код ядра unique_for_date, и он не казался очень интуитивным расширить его.
Есть идеи, предложения или мнения о том, как лучше всего это сделать?