7

我有一个使用 django-taggit 的模型。我想执行向此模型添加标签的 South 数据迁移。但是,.tags 管理器在 South 迁移中不可用,您必须使用 South orm['myapp.MyModel'] API 而不是普通的 Django orm。

这样做会引发异常,因为 post.tags 是 None。

post = orm['blog.Post'].objects.latest()
post.tags.add('programming')

是否可以在 South 数据迁移中使用 taggit 创建和应用标签?如果是这样,怎么做?

4

2 回答 2

8

是的,您可以这样做,但是您需要Taggit直接使用 's API(即创建Tagand TaggedItem),而不是使用add方法。

首先,您需要先冻结taggit此迁移:

./manage.py datamigration blog migration_name --freeze taggit

然后您的 forwards 方法可能看起来像这样(假设您有一个要应用于所有 Post 对象的标签列表。

def forwards(self, orm):
    for post in orm['blog.Post'].objects.all():
        # A list of tags you want to add to all Posts.
        tags = ['tags', 'to', 'add']

        for tag_name in tags:
            # Find the any Tag/TaggedItem with ``tag_name``, and associate it
            # to the blog Post
            ct = orm['contenttypes.contenttype'].objects.get(
                app_label='blog',
                model='post'
            )
            tag, created = orm['taggit.tag'].objects.get_or_create(
                name=tag_name)
            tagged_item, created = orm['taggit.taggeditem'].objects.get_or_create(
                tag=tag,
                content_type=ct,
                object_id=post.id  # Associates the Tag with your Post
            )
于 2012-12-11T19:59:20.010 回答
0

我想不是。您必须首先执行迁移,然后使用帖子对象添加默认标签。标签不与模型相关联。它们与模型对象相关联。

于 2012-12-03T22:04:40.773 回答