0

クエリセットで削除された各オブジェクトの履歴レコードを一括作成する必要があります。私はそれを正しくコーディングしました。次のように思います。

def bulk_delete_with_history(objects, model, batch_size=None, default_user=None, default_change_reason="", default_date=None):
    """
    The package `simple_history` logs the deletion one object at a time.  
    This does it in bulk.
    """
    model_manager = model._default_manager
    model_manager.filter(pk__in=[obj.pk for obj in objects]).delete()

    history_manager = get_history_manager_for_model(model)

    history_type = "-"
    historical_instances = []
    for instance in objects:
        history_user = getattr(
            instance,
            "_history_user",
            default_user or history_manager.model.get_default_history_user(
                instance),
        )
        row = history_manager.model(
            history_date=getattr(
                instance, "_history_date", default_date or timezone.now()
            ),
            history_user=history_user,
            history_change_reason=get_change_reason_from_object(
                instance) or default_change_reason,
            history_type=history_type,
            **{
                field.attname: getattr(instance, field.attname)
                for field in instance._meta.fields
                if field.name not in history_manager.model._history_excluded_fields
            }
        )
        if hasattr(history_manager.model, "history_relation"):
            row.history_relation_id = instance.pk
        historical_instances.append(row)

    return history_manager.bulk_create(
        historical_instances, batch_size=batch_size
    )

問題は、post_delete シグナルを切断して、一度にすべてを実行する前に単純な履歴によって履歴レコードが作成されないようにする必要があることです。

私はこれを試しましたが、うまくいきません。

models.signals.post_delete.disconnect(HistoricalRecords.post_delete, sender=Customer)

Customerこのユーティリティ関数をテストするために使用しているクラスはどこにありますか。

誰でもアドバイスできますか?前もって感謝します。

彼らのgithubページでも質問をしました - https://github.com/jazzband/django-simple-history/issues/717

4

1 に答える 1