StreamField 데이터 마이그레이션 참조

wagtail.blocks.migrations.migrate_operation

MigrateStreamData

class MigrateStreamData(RunPython)

StreamField 데이터 마이그레이션 작업을 위한 RunPython의 서브클래스

__init__

def __init__(app_name,
             model_name,
             field_name,
             operations_and_block_paths,
             revisions_from=None,
             chunk_size=1024,
             **kwargs)

MigrateStreamData 생성자

인수:

  • app_name str - 앱 이름.

  • model_name str - 모델 이름.

  • field_name str - StreamField 이름.

  • operations_and_block_paths List[Tuple[operation, str]] - 작업 및 적용할 블록 경로 목록.

  • revisions_from datetime, optional - 이 날짜 이후에 생성된 개정만 업데이트됩니다. None 을 전달하면 모든 개정이 업데이트됩니다. 기본값은 None 입니다. 라이브 및 최신 개정은 이 값에 관계없이 업데이트됩니다.

  • chunk_size int, optional - queryset.iteratorbulk_update 에 대한 청크 크기. 기본값은 1024입니다.

  • **kwargs - 상위 클래스 RunPython 에 대한 atomic, elidable, hints를 제공할 수 있습니다.

예시:

field1 이라는 블록 이름을 block1 으로 변경:

MigrateStreamData(
    app_name="blog",
    model_name="BlogPage",
    field_name="content",
    operations_and_block_paths=[
        (RenameStreamChildrenOperation(old_name="field1", new_name="block1"), ""),
    ],
    revisions_from=datetime.datetime(2022, 7, 25)
)

wagtail.blocks.migrations.operations

RenameStreamChildrenOperation

class RenameStreamChildrenOperation(BaseBlockOperation)

주어진 유형의 모든 StreamBlock 자식 이름 변경

참고:

이 작업을 사용할 때 block_path_str 은 이름이 변경될 블록이 아닌 이름이 변경될 블록을 포함하는 부모 StreamBlock 을 가리켜야 합니다.

속성:

  • old_name str - 이름이 변경될 자식 블록 유형의 이름

  • new_name str - 변경할 새 이름

RenameStructChildrenOperation

class RenameStructChildrenOperation(BaseBlockOperation)

주어진 유형의 모든 StructBlock 자식 이름 변경

참고:

이 작업을 사용할 때 block_path_str 은 이름이 변경될 블록이 아닌 이름이 변경될 블록을 포함하는 부모 StructBlock 을 가리켜야 합니다.

속성:

  • old_name str - 이름이 변경될 자식 블록 유형의 이름

  • new_name str - 변경할 새 이름

RemoveStreamChildrenOperation

class RemoveStreamChildrenOperation(BaseBlockOperation)

주어진 유형의 모든 StreamBlock 자식 제거

참고:

이 작업을 사용할 때 block_path_str 은 제거될 블록이 아닌 제거될 블록을 포함하는 부모 StreamBlock 을 가리켜야 합니다.

속성:

  • name str - 제거될 자식 블록 유형의 이름

RemoveStructChildrenOperation

class RemoveStructChildrenOperation(BaseBlockOperation)

주어진 유형의 모든 StructBlock 자식 제거

참고:

이 작업을 사용할 때 block_path_str 은 제거될 블록이 아닌 제거될 블록을 포함하는 부모 StructBlock 을 가리켜야 합니다.

속성:

  • name str - 제거될 자식 블록 유형의 이름

StreamChildrenToListBlockOperation

class StreamChildrenToListBlockOperation(BaseBlockOperation)

주어진 유형의 StreamBlock 자식을 새 ListBlock 으로 결합

참고:

이 작업을 사용할 때 block_path_str 은 자식 블록 자체가 아닌 결합될 블록을 포함하는 부모 StreamBlock 을 가리켜야 합니다.

속성:

  • block_name str - 결합될 자식 블록 유형의 이름

  • list_block_name str - 새 ListBlock 유형의 이름

StreamChildrenToStreamBlockOperation

class StreamChildrenToStreamBlockOperation(BaseBlockOperation)

주어진 유형의 StreamBlock 자식을 새 StreamBlock 으로 결합

참고:

이 작업을 사용할 때 block_path_str 은 자식 블록 자체가 아닌 결합될 블록을 포함하는 부모 StreamBlock 을 가리켜야 합니다.

속성:

  • block_names [str] - 결합될 자식 블록 유형의 이름

  • stream_block_name str - 새 StreamBlock 유형의 이름

AlterBlockValueOperation

class AlterBlockValueOperation(BaseBlockOperation)

각 블록의 값을 주어진 값으로 변경

속성:

  • new_value: 변경할 새 값

StreamChildrenToStructBlockOperation

class StreamChildrenToStructBlockOperation(BaseBlockOperation)

주어진 유형의 각 StreamBlock 자식을 새 StructBlock 안으로 이동

주어진 유형의 각 자식 블록에 대해 부모 StreamBlock 의 자식으로 새 StructBlock 이 생성되고, 해당 자식 블록은 부모 StreamBlock의 자식에서 새 StructBlock 안으로 이동됩니다.

예시:

다음 StreamField 정의를 고려해 봅시다.

mystream = StreamField([("char1", CharBlock()), ...], ...)

그러면 스트림 데이터는 다음과 같습니다.

[
    ...,
    { "type": "char1", "value": "Value1", ... },
    { "type": "char1", "value": "Value2", ... },
    ...
]

그리고 다음과 같이 작업을 정의하면:

StreamChildrenToStructBlockOperation("char1", "struct1")

변경될 스트림 데이터는 다음과 같습니다.

[
    ...,
    { "type": "struct1", "value": { "char1": "Value1" } },
    { "type": "struct1", "value": { "char1": "Value2" } },
    ...,
]

참고:

  • 이 작업을 사용할 때 block_path_str 은 자식 블록 자체가 아닌 결합될 블록을 포함하는 부모 StreamBlock 을 가리켜야 합니다.

  • 새 블록은 이전 블록과 구조적으로 다르므로 블록 ID는 여기에 보존되지 않습니다.

속성:

  • block_names str - 결합될 자식 블록 유형의 이름

  • struct_block_name str - 새 StructBlock 유형의 이름

wagtail.blocks.migrations.utils

InvalidBlockDefError

class InvalidBlockDefError(Exception)

유효하지 않은 블록 정의에 대한 예외

map_block_value

def map_block_value(block_value, block_def, block_path, operation, **kwargs)

블록의 값을 매핑합니다.

인수:

  • block_value: 블록의 값입니다. 구조 블록의 경우 자식 목록 또는 사전입니다.

  • block_def: 블록의 정의입니다.

  • block_path: 현재 블록(포함되지 않음)에서 값이 작업에 전달될 중첩 블록까지의 블록 이름 목록으로 . 으로 구분됩니다.

  • operation: apply 메서드가 값을 매핑하는 BaseBlockOperation 을 확장하는 Operation 클래스 인스턴스입니다.

반환값:

변환된 값

map_struct_block_value

def map_struct_block_value(struct_block_value, block_def, block_path,
                           **kwargs)

StructBlock 값의 각 자식 블록을 매핑합니다.

인수:

  • stream_block_value: StructBlock 의 값으로, 자식 블록의 사전입니다.

  • block_def: StructBlock 의 정의입니다.

  • block_path: 현재 블록(포함되지 않음)에서 값이 작업에 전달될 중첩 블록까지의 블록 이름 목록으로 . 으로 구분됩니다.

반환값:

  • mapped_value: 자식을 변환한 후의 StructBlock 값입니다.

map_list_block_value

def map_list_block_value(list_block_value, block_def, block_path, **kwargs)

ListBlock 값의 각 자식 블록을 매핑합니다.

인수:

  • stream_block_value: ListBlock 의 값으로, 자식 블록 목록입니다.

  • block_def: ListBlock 의 정의입니다.

  • block_path: 현재 블록(포함되지 않음)에서 값이 작업에 전달될 중첩 블록까지의 블록 이름 목록으로 . 으로 구분됩니다.

반환값:

  • mapped_value: 모든 자식을 변환한 후의 ListBlock 값입니다.

apply_changes_to_raw_data

def apply_changes_to_raw_data(raw_data, block_path_str, operation, streamfield,
                              **kwargs)

원시 스트림 데이터에 변경 사항 적용

인수:

  • raw_data: 현재 스트림 데이터(최상위 블록 목록)

  • block_path_str: 최상위 블록에서 값이 작업에 전달될 중첩 블록까지의 블록 이름 목록으로 . 으로 구분됩니다.

  • operation: operations.BaseBlockOperation 의 서브클래스입니다. 일치하는 블록 값에 변경 사항을 적용하기 위한 apply 메서드가 있습니다.

  • streamfield: 데이터가 마이그레이션되는 StreamField 입니다. 블록의 정의를 가져오는 데 사용됩니다.

반환값:

altered_raw_data:

블록 경로

wagtail.blocks.migrations 에 정의된 StreamField 데이터 마이그레이션 작업에는 적용할 블록을 결정하기 위한 “블록 경로”가 필요합니다.

block_path = "" | block_name ("." block_name)*
block_name = str

블록 경로는 다음 중 하나입니다.

  • 빈 문자열. 이 경우 작업은 최상위 스트림에 적용됩니다.

  • 블록 이름의 .(점)으로 구분된 시퀀스. 여기서 블록 이름은 StreamField 정의에서 블록에 지정된 이름입니다.

블록 이름은 스트림 데이터의 사전 구조에서 "type" 키와 연결된 값입니다. 따라서 ListBlock 멤버를 탐색하거나 선택하려면 "item" 블록 이름을 사용해야 합니다.

작업의 apply 메서드가 받는 값은 블록 경로의 터미널 블록 이름과 연결된 사전의 "value" 멤버입니다.

예시는 튜토리얼을 참조하십시오.