유산
Ormar는 현재 다양한 유형의 ORM 모델 상속 중 두 가지를 지원합니다.
- 믹스 인
- 콘크리트 테이블 상속(상위가 추상으로 설정됨 = 참)
상속 유형
다양한 유형의 상속에 대한 간략한 요약:
- Mixins \ [지원] - 하위 클래스 ormar를 사용하지 마십시오. 모델, 나중에 다른 모델에서 사용할 필드를 정의하기만 하면 됩니다(예: 각 모델에 대해 생성된 \ _ 날짜 및 업데이트된 \ _ 날짜). 실제 모델만 테이블을 만들고 믹스에 필드를 추가합니다.
- 콘크리트 테이블 상속[지원] - 상위가 추상적으로 표시되고 각 하위에는 상위 열과 자체 하위 열이 포함된 자체 테이블이 있으며 혼합과 다소 유사하지만 상위도 모델입니다.
- 단일 테이블 상속[지원되지 않음] - 필드가 상위 모델과 모든 하위 모델의 조합/합인 경우 하나의 테이블만 생성되지만 하위 모델은 데이터베이스에 있는 열의 하위 집합만 사용합니다(모든 상위 모델 및 자체 열, 다른 하위 모델 건너뛰기).
(의)
- 다중/조인 테이블 상속[지원되지 않음] - 열의 일부가 상위 모델에 저장되고 부분이 하위 모델에 저장되며 일대일 관계를 통해 서로 연결되며 두 모델이 즉시 백그라운드에서 작동함을 의미합니다.
- 프록시 모델[지원하지 않음] - 부모만 실제 테이블을 가지고 있고 자녀는 메소드를 추가하고 설정을 수정하는 등의 작업을 의미합니다.
믹스 인
Mixins를 사용하려면 ormar에서 상속되지 않는 클래스를 정의하기만 하면 됩니다. 모델이지만 ormar를 정의합니다. 필드를 클래스 변수로 지정합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 | base_ormar_config = ormar. OrmarConfig (
데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
메타데이터 = sqlalchemy. 메타데이터(),
엔진 = sqlalChemy.create_ (DATABASE_URL),
)
# 혼합은 필드를 정의하지만 일반 파이썬 클래스입니다.
클래스 AuditMixin:
생성됨_by: str = ormar. 문자열(max_long = 100)
ed_by: str = ormar. 문자열(max_long = 100, 기본값 = "Sam")
클래스 날짜 필드 혼합:
생성됨 날짜: datetim.datetime=ormar. 날짜 시간(기본값=datetime.datetime.now)
업데이트 된 날짜: datetim.datetime=ormar. 날짜 시간(기본값=datetime.datetime.now)
# 모델은 하나 이상의 혼합에서 상속할 수 있습니다.
클래스 카테고리(ormar. 모델, DateFieldsMixins, AuditMixin):
ormar_config = base_ormar_config (테이블 이름 = "카테고리")
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 50, 고유 = 참, 인덱스 = 참)
코드: int=ormar. 정수()
|
!!!Mixin은 모델이 아니므로 Ormar에서 상속해야 합니다. 최종 모델에서 ormar_config 필드를 모델링하고 정의합니다.
위의 카테고리 클래스에는 생성 \ _ 날짜, 업데이트 \ _ 날짜, 생성 \ _ by 및 업데이트 \ _ by의 네 가지 추가 필드가 있습니다.
범주 클래스 필드가 모든 혼합 필드와 결합되는 범주 모델에 대해 하나의 테이블만 생성됩니다.
클래스 이름의 Mixin은 선택 사항이지만 좋은 Python 연습입니다.
콘크리트 테이블 상속
개념적으로 콘크리트 테이블 상속은 Mixins와 매우 유사하지만 실제 ormar를 사용합니다. 모델을 기본 클래스로 사용합니다.
!!!경고 기본 클래스에는 ormar_config 개체에 Abstract = True 세트가 있으며, 비추상 마크업 클래스에서 상속하려고 하면 ModelDefinitionError가 발생합니다.
이 추상 모델은 초기화되지 않으므로 ormar_config 정의에서 메타데이터 및 데이터베이스를 건너뛸 수 있습니다.
그러나 제공하면 최종/콘크리트 클래스에서 메타데이터와 데이터베이스를 제공할 필요가 없도록 상속됩니다.
필요한 경우 어린이/콘크리트 클래스에서 언제든지 재정의할 수 있습니다.
또한 상속 체인에서 하나 이상의 클래스가 데이터베이스와 메타데이터를 제공해야 합니다. 그렇지 않으면 오류가 발생합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | #기본 클래스에는 추상적 = 참
# 이 모델은 초기화되지 않으므로 메타데이터 및 데이터베이스를 건너뛸 수 있습니다.
클래스 감사 모델(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
생성됨_by: str = ormar. 문자열(max_long = 100)
ed_by: str = ormar. 문자열(max_long = 100, 기본값 = "Sam")
# 하지만 제공하면 상속됩니다 - DRY (반복하지 마세요)
클래스 날짜 필드 모델(ormar. 모델):
ormar_config = base_ormar_config 사본(
추상 = 참,
메타데이터 = 메타데이터,
데이터베이스 = db,
)
생성됨 날짜: datetim.datetime=ormar. 날짜 시간(기본값=datetime.datetime.now)
업데이트 된 날짜: datetim.datetime=ormar. 날짜 시간(기본값=datetime.datetime.now)
# 그렇게 하면 구체적인 클래스에 메타데이터와 데이터베이스를 제공할 필요가 없습니다.
클래스 범주(날짜 필드 모델, 감사 모델):
ormar_config = base_ormar_config (테이블 이름 = "카테고리")
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 50, 고유 = 참, 인덱스 = 참)
코드: int=ormar. 정수()
|
상속된 옵션/설정 목록은 메타데이터, 데이터베이스 및 제약 조건과 같습니다.
물론 그 외에도 기본 클래스의 모든 필드가 결합되어 최종 모델의 콘크리트 테이블에 생성됩니다.
!!!최종 클래스에서 abstarct = False를 제공할 필요가 없습니다. 이것은 상속되지 않은 기본 설정입니다.
하위 클래스의 필드 재정의
일반 파이썬 클래스 상속과 마찬가지로 이전에 만든 필드를 재정의할 수 있습니다.
이름과 새 정의가 같은 필드를 정의할 때마다 이전에 정의한 필드가 완전히 대체됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 | # 기본 클래스
클래스 날짜 필드 모델(ormar. 모델):
ormar_config = OrmarConfig (
추상 = 참,
메타데이터 = 메타데이터,
데이터베이스 = db,
# UniqueCol에는 ormar가 아닌 sqlalchemy db 열 이름이 필요합니다.
제약 조건 = [ormar. 고유 열("tion_date", "tion_date")]
)
생성됨 날짜: datetim.datetime = ormar. 날짜 시간 (
기본값 = datetime.datetime.now, 이름 = "
)
업데이트 된 날짜: datetim.datetime = ormar. 날짜 시간(
기본값 = datetime.datetime.now, 이름 = "tion_day"
)
클래스 재정의 필드(날짜 필드 모델):
ormar_config = OrmarConfig (
표 이름 = "재정의",
메타데이터 = 메타데이터,
데이터베이스 = db,
)
ID: int = ormar. 정수(prial_key = 참)
# 여기에서 ed_day가 문자열 필드로 대체됩니다.
생성됨 _ 날짜: str = ormar. 문자열(max_long = 200, 이름 = " 생성됨 _ 날짜 ")
# 최종 필드가 올바르게 선언되고 작성되었는지 확인할 수 있습니다.
변경 _ 필드 = ReedField.ormar_config model_field [ " ed_day " ]
변경_필드 기본값이 없음 주장
변경 _ 필드 별칭 = = "ing_day"를 주장합니다.
ReedField.ormar_config table.에서 x에 대해 임의의 (x.name== "ing_day"를 주장합니다.)
주장은 인스턴스(
ReedField ormar_config 테이블.열 ["ing_날짜"].type,
SqlalChemy.sql.sqltypes. 끈,
)
|
!!!는 열 이름으로 UniqueCol 제약 조건을 선언하는 경우 최종 모델이 동일한 이름의 열을 선언해야 한다고 경고합니다. 그렇지 않으면 ModelDefinitionError 올라갑니다.
| 따라서 위의 예에서 `RedefinedField` 모델에서 `created_date` 에 `name` 를 제공하지 않는 경우
Ormar는 불평할 것입니다.
`created_date: str = ormar.String(max_length=200) # exception`
`created_date: str = ormar.String(max_length=200, name="creation_date2") # exception`
|
상속 관계
부모 클래스든 자녀 클래스든 상속의 모든 단계에서 관계를 선언할 수 있습니다.
하위 모델 수준에서 관계를 정의할 때 상위 모델에 정의된 관계(동일한 필드 이름을 사용하는 경우)를 재정의하거나 새 관계를 정의하는 경우 해당 하위 모델에서만 액세스할 수 있습니다.
관계를 상속할 때는 항상 관련 _name 매개 변수에 주의를 기울여야 합니다. 동일한 관계를 상속하는 여러 하위 클래스를 정의할 때 관련 모델에서 고유해야 합니다.
관련 _ 이름 인수를 제공하지 않으면 ormar가 계산합니다. 모든 하위 모델에는 기본 관련 _ 이름(class.name() +'s')을 계산하는 데 사용되는 클래스 이름이 달라야 하므로 상속에 적용됩니다.
그러나 관련 _ 이름을 제공하는 경우 관련 모델 측에서 서로 재정의하기 때문에 모든 하위 모델에서 이름을 재사용할 수 없습니다.
따라서 두 가지 옵션이 있습니다.
- 하위 모델에서 관계형 필드를 재정의하고 다른 관련 _name 매개 변수를 수동으로 제공
- ormar가 처리하게 해주세요 -> 관련 자동 조정 _name: 원본 관련 _이름 +"_" + 하위 모델 테이블 이름
복잡하게 들릴 수 있지만 다음 예를 살펴보겠습니다.
외국 키 관계
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 | # 관계에 사용되는 일반 모델
클래스 사람(ormar. 모델):
ormar_config = base_ormar_config 사본()
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 100)
# 부모 모델 - 추상적이어야 합니다
클래스 카(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 50)
소유자: 사람 = ormar. 외래 키(사람)
# 우리는 Person 모델을 다시 참조하므로**는**가 관련 _name을 제공해야 합니다.
공동 소유자: Person = ormar. ForeignKey (Person, t_name = "coowned")
생성됨 날짜: datetim.datetime=ormar. 날짜 시간(기본값=datetime.datetime.now)
클래스 트럭(자동차):
ormar_config = base_ormar_config 사본()
최대 용량: int = ormar. 정수()
클래스 버스(자동차):
ormar_config = base_ormar_config (테이블 이름 = "버스")
max_: int = ormar. 정수()
|
이제 사용자 모델의 필드를 확인하면 다음이 표시됩니다.
| Person ormar_config model_field
"""
{'Id':<class 'ormar.fields.model_fields.Integer'>,
'이름':<class 'ormar.fields.model_fields.String'>,
'트럭':<class 'ormar.fields.foreign_key.ForeignKey'>,
'coownd_':<class 'ormar.fields.foreign_key.ForeignKey'>,
'버스':<class 'ormar.fields.foreign_key.ForeignKey'>,
coownd_bus':<class 'ormar.fields.foreign_key.ForeignKey'>}
"""
|
이 사람이 소유한 트럭 및 버스 카테고리로 이어지는 트럭 및 버스 필드를 소유하는 방법을 확인하십시오. 관련된 _name 매개 변수가 없으므로 기본 이름이 사용됩니다.
공동 소유 자동차는 coowned_ 트럭과 coowned_ 버스가 참조해야 합니다. Ormar는 하위 모델 테이블 이름에서 가져온 _ 및 _bus 접미사를 추가합니다.
좋아 보이지만 소유 트럭의 기본 이름은 OK(트럭)인데 버스가 못생겼는데 어떻게 바꾸나요?
솔루션은 매우 간단합니다. 버스 클래스의 필드를 재정의하고 서로 다른 관련 _name 매개 변수를 제공하기만 하면 됩니다.
| 위의 나머지 예는 동일하게 유지됩니다.
클래스 버스(자동차):
ormar_config = base_ormar_config (테이블 이름 = "버스")
# 관련 이름을 변경하는 새 필드
소유자: 사람 = ormar. 외래 키(사람, 관련 _ 이름 = "버스")
max_: int = ormar. 정수()
|
이제 열이 훨씬 좋아 보입니다.
| Person ormar_config model_field
"""
{'Id':<class 'ormar.fields.model_fields.Integer'>,
'이름':<class 'ormar.fields.model_fields.String'>,
'트럭':<class 'ormar.fields.foreign_key.ForeignKey'>,
'coownd_':<class 'ormar.fields.foreign_key.ForeignKey'>,
'버스':<class 'ormar.fields.foreign_key.ForeignKey'>,
coownd_bus':<class 'ormar.fields.foreign_key.ForeignKey'>}
"""
|
!!!올바른 접미사를 추가하는 소유자 필드에 관련된 _ 이름을 제공할 수도 있습니다.
| `owner: Person = ormar.ForeignKey(Person, related_name="owned")`
그리고 개인 소유 자동차의 모델 필드가 될 것입니다. `owned_trucks` 그리고 `owned_buses` 네.
|
다대다 관계
마찬가지로, ManyTo다양체 관계를 선언하는 모델에서 상속할 수 있지만 한 가지 상당한 차이가 있는 모델, 즉 스루 모델에서 상속할 수 있습니다.
스루 모델은 다른 필드를 저장할 수 있고 이제 두 개의 테이블(테이블에서 하나의 테이블로)만 연결되므로 M2M 관계 필드를 상속하는 각 하위에는 별도의 스루 모델이 있어야 합니다.
물론 각 하위 모델의 관계를 재정의할 수 있지만 추가 코드가 필요하며 전체적으로 상속의 의미를 파괴합니다. 기본 명명 규칙에 동의하는 경우 Ormar가 이 문제를 처리하고 필요한 경우 하위 모델에서 해당 규칙을 수동으로 재정의할 수 있습니다.
다시 한 번 개념을 보다 쉽게 파악할 수 있는 예를 살펴보겠습니다.
위에서 설명한 이전 예제를 수정하여 co_ 소유자의 m2m 관계를 사용합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 | # 사람은 위와 동일하게 유지됩니다
클래스 사람(ormar. 모델):
ormar_config = base_ormar_config 사본()
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 100)
# 사람과 자동차 사이의 새로운 스루 모델 2
클래스 페르소나 자동차(ormar. 모델):
ormar_config = base_ormar_config (테이블 이름 = "cars_x_")
# co_가 지금 어떻게 ManyToMan 관계인지 주목하십시오.
클래스 카2(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 50)
# 관련 이름 참고 - 사람마다 고유해야 합니다.
# 모델링, 얼마나 많은 모델이 사람으로 이어지는지에 관계없이
소유자: Person = ormar. ForeignKey (Person, t_name = "소유")
공동 소유자: 목록 [사람] = ormar. 많은 사람 (
사람, 경유 = 페르소나 자동차, 관련 _ 이름 = "coowned"
)
생성됨 날짜: datetim.datetime=ormar. 날짜 시간(기본값=datetime.datetime.now)
# 하위 모델은 추가 필드만 정의합니다.
클래스 트럭 2(Car2):
ormar_config = base_ormar_config (tablename = "trucks2")
최대 용량: int = ormar. 정수()
클래스 버스2(Car2):
ormar_config = base_ormar_config (테이블 이름 = "buses2")
max_: int = ormar. 정수()
|
Ormar는 하위 모델의 테이블 이름을 포함하도록 필드의 관련 _ 이름을 자동으로 수정합니다. 기본 이름은 원래 관련 _이름 + '_' + 하위 테이블 이름입니다.
따라서 Truck2 클래스의 경우 정의된 관계 owner: Person = ormar.ForeignKey(Person, related_name="owned") 가 소유됩니다 _trucks2
사용자 모델에 존재하는 필드 목록을 확인하여 이름을 확인할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | Person ormar_config model_field
{
# 모든 관계 필드가 개인에게 고유해야 하는 방법 참고
# 자동 생성 또는 수동으로 덮어쓰기 여부에 관계없이
'Id':<class 'ormar.fields.model_fields.Integer'>,
'이름':<class 'ormar.fields.model_fields.String'>,
# 이전 예제에서 확장하여 모든 '이전' 필드가 여기에 있음을 주목하십시오.
'트럭':<class 'ormar.fields.foreign_key.ForeignKey'>,
'coownd_':<class 'ormar.fields.foreign_key.ForeignKey'>,
'버스':<class 'ormar.fields.foreign_key.ForeignKey'>,
'coownd_bus':<class 'ormar.fields.foreign_key.ForeignKey'>,
# 새로 정의된 관련 필드
Own_trucks2':<class 'ormar.fields.foreign_key.ForeignKey'>,
'coownd_trucks2':<class 'abc.ManyToMany'>,
Own_buses2':<class 'ormar.fields.foreign_key.ForeignKey'>,
'coownd_buses2': <class 'abc.ManyToMany'>
}
|
하지만 그게 다가 아닙니다. 오르마의 내부 구조이지만 데이터베이스의 데이터 구조에 영향을 미치므로 Bus2 및 Truck2 모델의 통과 모델을 확인해 보겠습니다.
| Bus2.ormar_config model_field['co_']를 통해
<class 'abc.PersonsCarBus2'>
Bus2. ormar_config model_field ['co_']. ormar_config 테이블 이름
'_x__buses2'
트럭2. ormar_config model_field ['co_']를 통해
<class 'abc.PersonsCarTruck2'>
트럭2. ormar_config model_field ['co_']. ormar_config 테이블 이름
'_x__trucks2'
|
위에서 볼 수 있듯이 Ormar는 각 하위 클래스에 대해 스루 모델을 복제하고 끝에 하위 클래스 이름을 추가하고 복제된 필드의 테이블 이름을 변경하여 하위 테이블 이름을 사용합니다.
원본 모델이 사용되지 않을 뿐만 아니라 해당 모델의 테이블도 메타데이터에서 제거됩니다.
| Bus2.ormar_config metado.tables.key()
DTC_key(['test_date_', '', '', '', '', '', '', '', '',
_x__trucks2', 'trucks2', 'cars_x__buses2', 'buses2'])
|
따라서 도중에 상속을 도입하고 모델을 추상 상위 모델로 변환하면 주의하지 않으면 표의 데이터가 손실될 수 있습니다.
!!!스루 모델의 원래 테이블 이름과 모델 이름은 사용되지 않습니다. 복제된 모델 테이블만 생성되고 사용됩니다.
!!!경고: ManyToMan 관계를 정의하는 모델의 각 하위 클래스는 새 데이터베이스 및 테이블을 의미하는 새로운 스루 모델을 생성합니다.
| 즉, 어린이 모델을 정의할 때마다 수동으로 만들어야 합니다.
데이터베이스의 테이블 또는 마이그레이션을 실행합니다(alembic 포함).
|
부모 필드 제외
Ormar를 사용하면 상속된 모델의 상위 모델에서 특정 필드를 건너뛸 수 있습니다.
!!!모델을 보다 추상적인 모델과 혼합으로 분할하여 동일한 동작을 달성할 수 있습니다. 이는 정상적인 상황에서 선호되는 접근 방식입니다.
하위 모델의 특정 필드를 건너뛰려면 건너뛸 모든 필드를 나열하십시오. model.ormar_config.exclude_parent_fields 파라미터는 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 | base_ormar_config = OrmarConfig (
메타데이터 = sa. 메타데이터(),
데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
)
클래스 감사 모델(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
생성됨_by: str = ormar. 문자열(max_long = 100)
ed_by: str = ormar. 문자열(max_long = 100, 기본값 = "Sam")
클래스 날짜 필드 모델(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
생성됨 날짜: datetim.datetime = ormar. 날짜 시간 (
기본값 = datetime.datetime.now, 이름 = "
)
업데이트 된 날짜: datetim.datetime = ormar. 날짜 시간(
기본값 = datetime.datetime.now, 이름 = "tion_day"
)
클래스 범주(날짜 필드 모델, 감사 모델):
ormar_config = base_ormar_config 사본(
표 이름 = "카테고리",
# 건너뛸 필드 설정
제외 _y_field = ["ed_by", "ed_day"],
)
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 50, 고유 = 참, 인덱스 = 참)
코드: int=ormar. 정수()
# 이제 카테고리의 업데이트된 필드가 모든 위치에서 사라졌습니다 -> ormar 필드, pydantic 필드 및 sqlachemy 테이블 열
# 카테고리에서 사용할 수 있는 필드의 전체 목록은 다음과 같습니다. ["ted_by", "ted_day", "id", "name", "code"]
|
필드가 시작된 상위 모델에 관계없이 상위 필드를 제외하는 필드 이름만 제공하면 됩니다.
!!!하위 모델에서 필드를 덮어쓰려면 해당 필드를 제외할 필요가 없으며 하위 모델의 필드 선언을 동일한 필드 이름으로 덮어쓰기만 하면 됩니다.
경고: 이 동작은 mypy와 정적 유형 체커를 혼동할 수 있지만 존재하지 않는 필드에 액세스하는 것은 런타임에 실패합니다. 이것이 기본 클래스를 분할하는 것이 선호되는 이유입니다.
예를 들어 기본 클래스를 분할하면 동일한 효과를 얻을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 | base_ormar_config = OrmarConfig (
메타데이터 = sa. 메타데이터(),
데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
)
클래스 AuditCreateModel(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
생성됨_by: str = ormar. 문자열(max_long = 100)
클래스 감사업데이트 모델(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
ed_by: str = ormar. 문자열(max_long = 100, 기본값 = "Sam")
클래스CreateDateFieldsModel(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
생성됨 날짜: datetim.datetime = ormar. 날짜 시간 (
기본값 = datetime.datetime.now, 이름 = "
)
클래스UpdateDateFieldsModel(ormar. 모델):
ormar_config = base_ormar_config (추상 = 참)
업데이트 된 날짜: datetim.datetime = ormar. 날짜 시간(
기본값 = datetime.datetime.now, 이름 = "tion_day"
)
클래스 카테고리(CreateDateFieldsModel, AuditCreateModel):
ormar_config = base_ormar_config (테이블 이름 = "카테고리")
ID: int = ormar. 정수(prial_key = 참)
이름: str = ormar. 문자열(max_long = 50, 고유 = 참, 인덱스 = 참)
코드: int=ormar. 정수()
|
이렇게 하면 필요한 경우 생성된 클래스와 업데이트된 클래스에서 상속할 수 있으며 그렇지 않으면 클래스 중 하나만 상속할 수 있습니다.