我正在尝试为我的某个应用制定数据迁移。我正在使用此处提到的声誉系统 - 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
应用。请让我知道我在这里做错了什么。
提前致谢。
答案 0 :(得分:2)
看起来这是不可能的。
你可以在数据迁移中做更多的事情;任何型号都可以 可以使用。 唯一需要注意的是,您将无法访问 您的模型上的任何自定义方法或管理器,因为它们不是 作为冷冻过程的一部分保存(没有办法做到这一点 通常);您必须将所需的任何代码复制到迁移中 本身。随意在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版上测试)