У Django есть unique_for_date свойство, которое можно установить при добавлении SlugField к модели. Это заставляет краткий заголовок быть уникальным только для Даты поля, которое Вы указываете:
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)
Таким образом, я мог создать следующие URL:
/example/category-one/slug
/example/category-two/slug
/example/category-two/slug <--Rejected as duplicate
Мои идеи до сих пор:
Добавьте уникальный индекс для краткого заголовка и categoryid к таблице. Это требует кода за пределами Django. И встроенный администратор обработал бы это правильно когда вставить/обновить сбои?
Переопределите сохранение для модели и добавьте мою собственную проверку, бросив ошибку, если дубликат существует. Я знаю, что это будет работать, но это не кажется очень DRY.
Создайте новое поле краткого заголовка, наследовавшееся основе, и добавьте unique_for функциональность там. Это походит на лучший способ, но я просмотрел код unique_for_date ядра, и это не казалось очень интуитивным для расширения его.
Какие-либо идеи, предложения или мнения о лучшем способе сделать это?
Я использую расширение Switchhost именно для этой проблемы: https://addons.mozilla.org/en-us/firefox/addon/14258
Легко настроить, и еще проще переключать хосты.
-121--1395495- [11295495-Как насчет 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',)
Это создает индекс, но это не за пределами Джанго;) или я пропустил точку зрения?