Как создать уникальный для поля слизняк в 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
мои идеи так далеко:
добавьте уникальный индекс для slug и categoryid в таблицу. для этого требуется код за пределами Django. И будет ли встроенный администратор обрабатывать это правильно, когда вставка/обновление завершится неудачей?
переопределите сохранение для модели и добавьте мою собственную проверку, вызвав ошибку, если дубликат существует. Я знаю, что это сработает, но это не кажется очень СУХОЙ.
создайте новое поле slug, наследуемое от базы, и добавьте туда функциональность unique_for. это кажется лучшим способом, но я просмотрел код unique_for_date ядра, и это не казалось очень интуитивным, чтобы расширить его.
любые идеи, предложения или мнения о лучшем способе сделать это?
1 ответов
насчет unique_together?
class Example(models.Model):
title = models.CharField()
slug = models.SlugField(db_index=False)
category = models.ForeignKey(Category)
class Meta:
unique_together = (('slug','category'),)
# or also working since Django 1.0:
# unique_together = ('slug','category',)
это создает индекс, но он не находится вне Django;)или я упустил суть?