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_namestr - 앱 이름.model_namestr - 모델 이름.field_namestr -StreamField이름.operations_and_block_pathsList[Tuple[operation, str]] - 작업 및 적용할 블록 경로 목록.revisions_fromdatetime, optional - 이 날짜 이후에 생성된 개정만 업데이트됩니다.None을 전달하면 모든 개정이 업데이트됩니다. 기본값은None입니다. 라이브 및 최신 개정은 이 값에 관계없이 업데이트됩니다.chunk_sizeint, optional -queryset.iterator및bulk_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_namestr - 이름이 변경될 자식 블록 유형의 이름new_namestr - 변경할 새 이름
RenameStructChildrenOperation¶
class RenameStructChildrenOperation(BaseBlockOperation)
주어진 유형의 모든 StructBlock 자식 이름 변경
참고:
이 작업을 사용할 때 block_path_str 은 이름이 변경될 블록이 아닌 이름이 변경될 블록을 포함하는 부모 StructBlock 을 가리켜야 합니다.
속성:
old_namestr - 이름이 변경될 자식 블록 유형의 이름new_namestr - 변경할 새 이름
RemoveStreamChildrenOperation¶
class RemoveStreamChildrenOperation(BaseBlockOperation)
주어진 유형의 모든 StreamBlock 자식 제거
참고:
이 작업을 사용할 때 block_path_str 은 제거될 블록이 아닌 제거될 블록을 포함하는 부모 StreamBlock 을 가리켜야 합니다.
속성:
namestr - 제거될 자식 블록 유형의 이름
RemoveStructChildrenOperation¶
class RemoveStructChildrenOperation(BaseBlockOperation)
주어진 유형의 모든 StructBlock 자식 제거
참고:
이 작업을 사용할 때 block_path_str 은 제거될 블록이 아닌 제거될 블록을 포함하는 부모 StructBlock 을 가리켜야 합니다.
속성:
namestr - 제거될 자식 블록 유형의 이름
StreamChildrenToListBlockOperation¶
class StreamChildrenToListBlockOperation(BaseBlockOperation)
주어진 유형의 StreamBlock 자식을 새 ListBlock 으로 결합
참고:
이 작업을 사용할 때 block_path_str 은 자식 블록 자체가 아닌 결합될 블록을 포함하는 부모 StreamBlock 을 가리켜야 합니다.
속성:
block_namestr - 결합될 자식 블록 유형의 이름list_block_namestr - 새ListBlock유형의 이름
StreamChildrenToStreamBlockOperation¶
class StreamChildrenToStreamBlockOperation(BaseBlockOperation)
주어진 유형의 StreamBlock 자식을 새 StreamBlock 으로 결합
참고:
이 작업을 사용할 때 block_path_str 은 자식 블록 자체가 아닌 결합될 블록을 포함하는 부모 StreamBlock 을 가리켜야 합니다.
속성:
block_names[str] - 결합될 자식 블록 유형의 이름stream_block_namestr - 새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_namesstr - 결합될 자식 블록 유형의 이름struct_block_namestr - 새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" 멤버입니다.
예시는 튜토리얼을 참조하십시오.