Django-Taggit проверяет вновь добавленные теги перед сохранением

Вот так выглядят мои модели. Мне не удалось выполнить проверку, переопределив метод сохранения любой из моделей.

class NotificationListTag(TaggedItemBase):
    content_object = models.ForeignKey('Mailer')


class Mailer(models.Model):

    from_email = models.CharField(max_length=255)
    to_emails = TaggableManager(
        through=NotificationListTag,
        blank=True,
        verbose_name='To Emails',
        help_text='Space separated email ID'
    )

Как проверить каждый из вновь добавленных тегов перед его сохранением. Я что-то упустил.


person Mevin Babu    schedule 15.08.2016    source источник
comment
Я думаю, что вы допустили несколько ошибок при анонимизации этого кода: 1) ParentalKey относится к UnchainedMailer, а не к Mailer; 2) если вы используете ParentalKey, вам также необходимо использовать ClusterableModel и ClusterTaggableManager в Mailer; в противном случае ParentalKey должен быть просто ForeignKey. (Я бы предложил сначала попытаться заставить это работать с помощью простого ForeignKey - таким образом будет меньше движущихся частей).   -  person gasman    schedule 15.08.2016
comment
@gasman Под ForeignKey вы имеете в виду реализовать вот так django-taggit .readthedocs.io/en/latest/ с помощью пользовательского тега?   -  person Mevin Babu    schedule 15.08.2016
comment
@gasman Итак, я попытался переключиться на ForeignKey, но я все еще не могу перехватить правильный метод сохранения. Тег, который я хочу проверить, всегда создается. Есть ли способ в трясогузке, я могу перехватить его на уровне формы?   -  person Mevin Babu    schedule 15.08.2016


Ответы (1)


В итоге я создал собственный API для предложений автозаполнения тегов, который предлагает только допустимые имена.

Вы можете переопределить вызов tagit.js трясогузки по умолчанию, чтобы передать ему свой собственный URL-адрес автозаполнения. Таким образом, вам не нужно выполнять проверку после того, как пользователь ввел значение.

person Mevin Babu    schedule 13.10.2016