我創建了一個 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 陳述句,但它不起作用,因為該函式一直被呼叫。
uj5u.com熱心網友回復:
該post_migrate信號是一次每一個應用程式遷移發送,即使沒有改變。sender連接信號時傳遞引數以僅在您的應用程式遷移后運行您的函式一次
def full_sync_if_model_change(plan, **kwargs):
...
class LakeSyncConfig(AppConfig):
name = "lake_sync"
def ready(self):
post_migrate.connect(full_sync_if_model_change, sender=self)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/337846.html
上一篇:將列中的單元格與指標相關聯
