Code/Django

wagtail models.py > models/<modelname>.py 분리하기

하말 ⍺ 2024. 8. 19. 17:21
반응형

models.py의 내용이 점점 길어짐에 따라 수정할때 엄청난 스크롤 압박을 받게되어 효율적으로 사용하는법을 찾아서 적용하였다.

간단히 말하자면 기존 models.py에 있는 각 class 를 파일별로 나누는 것이다.
예를 들어 models.py에 APage BPage CPage  라는 class (page)와 DBlock EBlock FBlock 라는 class(block)이 있다면

app/
    models/
        __init__.py
        a_page.py
        b_page.py
        c_page.py
        blocks.py

이렇게 총 5개의 파일을 만들어준다.

# __init__.py

from .a_page import A
from .b_page import B
from .c_page import C
from .blocks import D,E,F
# A_page.py example

from django.db import models
from wagtail.models import Page
from wagtail.admin.panels import FieldPanel

class APage(Page):
	summary = models.TextField(blank=True, max_length=500)
    
    content_panels = Page.content_panels + [
        FieldPanel('summary', heading="요약"),
        ]
# blocks.py example


from wagtail.blocks import StructBlock, BooleanBlock


class DBlock(StructBlock):
    D1 = BooleanBlock(required=False, default=False)
    D2 = BooleanBlock(required=False, default=False)

class EBlock(StructBlock):
    E1 = BooleanBlock(required=False, default=False)
    E2 = BooleanBlock(required=False, default=False)
    
class FBlock(StructBlock):
    F1 = BooleanBlock(required=False, default=False)
    F2 = BooleanBlock(required=False, default=False)

이런식으로 page class와 blocks를 구분해서 만들어서 편리하게 관리를 할 수 있다.