2010-04-01 2 views
2

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

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

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

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

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

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

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

tags = TagManager() # or somesuch 

ответ

2

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

from tagging.fields import TagField 

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

Я не делал этого вместо этого, подумал об этом, я тоже это сделал *. Я проверю с TagField, но без регистра. – Oli

+0

Такая же ошибка: нет такого столбца: post_blogpost.tags Я знаю, что он просто хочет, чтобы я добавил новый столбец char в таблицу моей базы данных ... Я хочу сказать, почему я должен? Все теги должны храниться в моделях приложений тегов. Я не хочу крутить мою модель с такими жесткими зависимостями. – Oli

+0

Я помню, теперь вы очень сильно настроены на то, чтобы нормализовать до 11. Возможно, пришло время либо сдаться, либо позволить джанго-теги делать то, что он хочет, или катить свою собственную библиотеку тегов. – istruble

0

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

from tagging.fields import TagField 

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^