Добавлены теги к существующей модели, теперь, как работает ее администратор? - PullRequest
2 голосов
/ 01 апреля 2010

Я хотел добавить тег ввода в стиле StackOverflow в мою модель блога. Это модель, в которой уже есть много данных.

class BlogPost(models.Model):
    # my blog fields

try:
    tagging.register(BlogPost)
except tagging.AlreadyRegistered:
    pass

Я подумал, что это все, что мне нужно, поэтому я просмотрел свою старую базу данных сообщений в блоге (это недавно портированный блог) и скопировал теги. Это сработало, и я мог отображать теги и фильтровать по тегам.

Однако я только что написал новый блог-пост и понял, что там нет поля тегов.

Читая документацию (по совпадению, достаточно сухую, чтобы использовать ее в качестве антиперспиранта), я нашел TagField. Думая, что это будет просто слой в стиле менеджера поверх существующего регистра тегов, я добавил его. Он жаловался на то, что там нет столбца тегов.

Я бы предпочел не денормализовать теги только для того, чтобы создать интерфейс для их ввода. Есть ли класс TagManager, который я могу просто установить на модель?

    tags = TagManager() # or somesuch

Ответы [ 2 ]

2 голосов
/ 01 апреля 2010

Вы пытались использовать TagField () в модели вместо регистрации модели?

from tagging.fields import TagField

class BlogPost(models.Model):
    # ...
    tags = TagField()
0 голосов
/ 10 апреля 2010

Как сказал istruble (извините, я не могу комментировать выше): Вы пытались использовать TagField () в модели вместо регистрации модели?

from tagging.fields import TagField

class BlogPost(models.Model):
    # ...
    tags = TagField()

Но после этого вам нужно изменить таблицу базы данных. Я бы порекомендовал сделать резервную копию вашей базы данных. Затем запустите manage.py reset APPNAME, чтобы проверить, как изменилась таблица. Восстановите резервную копию и попробуйте изменить таблицу, чтобы она выглядела как новая. Таким образом, вы не потеряете свои данные;)

И помните, syncdb не будет работать, так как таблица уже существует.

...