Как создать краткий заголовок unique_for_field в Django?

У 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 ядра, и это не казалось очень интуитивным для расширения его.

Какие-либо идеи, предложения или мнения о лучшем способе сделать это?

6
задан Lance McNearney 31 January 2010 в 21:32
поделиться

1 ответ

Я использую расширение 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',)

Это создает индекс, но это не за пределами Джанго;) или я пропустил точку зрения?

14
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: