Django 数据迁移期间模型不可用

Django 数据迁移期间模型不可用,django,django-south,data-migration,django-reversion,Django,Django South,Data Migration,Django Reversion,我在我的应用程序中添加了一个Target模型,通过一对一字段标记Revision对象(来自django reversion)。标记取决于版本集中的对象,如果其中任何对象需要标记,则应为整个版本设置标记。我正在尝试使用django-south数据迁移来迭代数据库中的所有Revision对象,检查相关version\u集中的每个对象,并在必要时设置标记 class Migration(DataMigration): def forwards(self, orm): for

我在我的应用程序中添加了一个
Target
模型,通过一对一字段标记
Revision
对象(来自
django reversion
)。标记取决于版本集中的对象,如果其中任何对象需要标记,则应为整个版本设置标记。我正在尝试使用
django-south
数据迁移来迭代数据库中的所有
Revision
对象,检查相关
version\u集中的每个对象,并在必要时设置标记

class Migration(DataMigration):

    def forwards(self, orm):
        for revision in orm["reversion.Revision"].objects.all():
            try:
                revision.target # the revision is already tagged
            except: # revision.target raises different sorts of DoesNotExist errors, 
                    # and I can't work out how to catch all of them
                for version in revision.version_set.all():
                    try:
                        tag = version.object.get_tag() # all models in my app that   
                        orm.Target.objects.create(     # specify tags have this method
                                revision=revision, 
                                tag=tag)
                        break
                    except AttributeError: # the version set doesn't contain any
                        pass               # models that specify a tag
该命令给出了一个错误:

    [... lots of stuff cut ...], line 21, in forwards
    for version in revision.version_set.all():
AttributeError: 'Revision' object has no attribute 'version_set'
在不同应用程序中进行数据迁移期间,如何访问
修订版
对象的
版本集

编辑多亏了丹尼尔,我走得更远了。在下面的代码中,我尝试通过迁移自己的
orm
访问所有模型:

def forwards(self, orm):
    my_models = { # models with a .get_tag() method
            "modela": orm.ModelA,
            "modelb": orm.ModelB,
            }
    for revision in orm["reversion.Revision"].objects.all():
        for version in orm["reversion.Version"].objects.filter(revision=revision):
            try:
                model = my_models[version.content_type.model]
                instance = model.objects.get(id=version.object_id)
                tag = instance.get_tag()
                orm.RevisionTargetLanguage.objects.create(
                        revision=revision,
                        tag=tag)
                break
            except KeyError: # not one of the models with a .get_tag() method
                pass
此操作在以下行失败:
instance=model.objects.get(id=version.object\u id\u int)
,例外情况是
DoesNotExist:ModelB匹配查询不存在

您可以尝试

orm['reversion.Version'].objects.filter(revision=revision)

这让我走上了正确的方向。我收到一个错误“应用程序“reversion”中的模型“version”在此迁移中不可用。我将“version”添加到数据迁移实例的“models”属性(from)中,但我认为我遇到了类似的问题:version.object.get_标记()调用始终引发AttributeError——可能是因为version.object表示的对象不可用。