我的项目中已经有一个模型,现在我想与django-mptt一起使用。该模型已包含一些数据。
在迁移期间,系统会要求您为django-mptt创建的某些字段设置默认值。按照文档中的指示,我将0设置为默认值之一。本文档继续进行,建议完成此操作后运行Model.objects.rebuild()
,以在字段中设置正确的值。我想通过我的迁移文件执行此操作。我不想通过我的django-shell运行此程序,因为这不是一次性操作。
我的迁移文件是如此:
# -*- coding: utf-8 -*-
# Generated by Django 1.11.16 on 2018-12-27 17:33
from __future__ import unicode_literals
from django.db import migrations, models
def migrate_mptt(apps, schema_editor):
ProductCategory = apps.get_model("product", "ProductCategory")
ProductCategory.objects.rebuild()
class Migration(migrations.Migration):
dependencies = [
('product', '0016_auto_20181227_2303'),
]
operations = [
migrations.RunPython(migrate_mptt),
]
在迁移时,我收到错误AttributeError: 'Manager' object has no attribute 'rebuild'
。当然,同一命令在shell中也可以完美地工作。
我需要通过迁移来执行此操作,因为我希望此操作在每次部署项目时自动运行。
答案 0 :(得分:0)
如果要重建适当的迁移,可以to use this code。如果您抓住AttributeError
,请尝试将模型管理器设置为your_name
属性(而不是objects
)。
此外,如果您希望在迁移后重建,则可以扩展您的应用程序配置:
from django.apps import AppConfig
from django.db.models.signals import post_migrate
def rebuild_tree(sender, **kwargs):
from .models import YourModel
YourModel.objects.rebuild()
class YouApponfig(AppConfig):
name = 'app_name'
def ready(self):
post_migrate.connect(rebuild_tree, sender=self)