我创建了一个post_migrate,目的是在迁移运行时同步表中的所有数据。这是post_migrate文件的片段:
# signals.py
@receiver(post_migrate)
def full_sync_if_model_change(plan, **kwargs):
if plan:
models_set = set()
for file, _ in plan:
for model in file.operations:
try:
model = SyncModel.objects.get(
app_name=file.app_label, model_name=model.model_name
)
models_set.add(model)
except ObjectDoesNotExist:
pass
print(models_set)
if models_set:
for model in models_set:
model.set_full_sync()
run_update_sync(model, False)
return
然而,当我运行迁移时,它被调用6次;从迁移的输出中可以看到:
evandro@evandro-340XAA-350XAA-550XAA:~/Desktop/.../test_service$ python3 manage.py migrateOperations to perform:
Apply all migrations: admin, auth, contenttypes, django_cron, lakehouse_sync, sessions, test_models
Running migrations:
Applying test_models.0019_auto_20211026_2052... OK
set()
set()
set()
set()
set()
set()
我还将在此处添加应用程序文件:
class LakeSyncConfig(AppConfig):
name = "lake_sync"
def ready(self):
"""Import signals"""
import lakehouse_sync.core.delete_action
from . import signals
我不知道该怎么做,我试图添加这个return语句,但它不起作用,因为函数一直在被调用。