访问数据迁移中的模型管理器方法

时间:2014-11-23 18:09:26

标签: django django-south data-migration

我正在尝试为我的某个应用制定数据迁移。我正在使用此处提到的声誉系统 - django-reputation

在我的forward方法中,我有以下代码 -

orm['reputation.reputation'].objects.log_reputation_action(user = user_x, originating_user = user_y, action_value = 10, target_object = sample_obj)

但在运行迁移时,我收到以下错误 -

AttributeError: 'Manager' object has no attribute 'log_reputation_action'

我已冻结了数据迁移中的reputation应用。请让我知道我在这里做错了什么。

提前致谢。

3 个答案:

答案 0 :(得分:2)

看起来这是不可能的。

来自South documentation

  

你可以在数据迁移中做更多的事情;任何型号都可以   可以使用。 唯一需要注意的是,您将无法访问   您的模型上的任何自定义方法或管理器,因为它们不是   作为冷冻过程的一部分保存(没有办法做到这一点   通常);您必须将所需的任何代码复制到迁移中   本身。随意在Migration类上创建它们的方法;南   忽略了前后的一切。

答案 1 :(得分:0)

自Django 1.8以来,您可以通过添加use_in_migrations属性在迁移中包含模型管理器。

来自文档: https://docs.djangoproject.com/en/2.0/topics/migrations/#model-managers

class MyManager(models.Manager):
    use_in_migrations = True

class MyModel(models.Model):
    objects = MyManager()

答案 2 :(得分:0)

通过在迁移中使用的示例来扩展@mattdedek的答案

def my_migration_function(apps, schema_editor):
    MyModel = apps.get_model('my_app_name', 'MyModel')
    MyModel.objects.create(name='foo')


class Migration(migrations.Migration):
    initial = True

    dependencies = [
        ...
    ]

    operations = [
        migrations.RunPython(my_migration_function),
    ]

当前可用于Django迁移(已在3.0.4版上测试)