콘텐츠로 이동

피단틱 필드만

Ormar를 사용하면 모델에서 일반 피단산 필드를 선언할 수 있으므로 str, int, HttpUrl, PaymentCardNumber 등과 같은 모든 기본 및 사용자 지정 피단산 필드에 액세스할 수 있습니다.

개별 필드가 아닌 중첩 전용 Pydantic 모델로 이어지는 필드를 선언할 수도 있습니다.

이러한 필드는 데이터베이스에 저장되지 않으므로(이 필드의 모든 내용) 기본값을 설정하거나 모델 초기화 중에 의미 있는 값을 제공해야 합니다.

Ormar가 Pydantic 필드의 값을 확인할 수 없는 경우 데이터베이스에서 데이터를 로드하는 동안 실패하고 선언된 Pydantic 필드에 필요한 값이 부족합니다.

값 제공 옵션은 아래에 설명되어 있습니다.

물론, 여러분은 그것들의 일부 또는 전부를 하나의 모델로 결합할 수 있습니다.

선택 필드

필드가 선택 사항으로 설정된 경우 제공되지 않은 경우 기본적으로 "없음"으로 설정되며, 이는 데이터베이스에서 로드하는 동안 정확히 발생합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
base_ormar_config = ormar. OrmarConfig (
    메타데이터 = sqlalchemy. 메타데이터(),
    데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
)


클래스 모델 테스트(ormar. 모델):
    ormar_config = base_ormar_config 사본()

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 200)
    번호: 선택 사항 [결제 카드 번호]

테스트 = 모델 테스트(이름 = "테스트")
주장test.name== "테스트"
테스트를 주장하십시오. 숫자는 없음
테스트 번호="123456789015"

기다려test.save()
test_Check = ModelTest.ts.get ()

주장test_check.name== "테스트"
# 로딩 후 없음으로 돌아갑니다
주장 test_Check 번호는 없음

기본값이 있는 필드

기본값을 설정하면 초기화 및 데이터베이스 로드 중에 이 값이 설정됩니다. 기본값을 "없음"으로 설정하는 것은 이 필드를 "선택 사항"으로 설정하는 것과 동일합니다.

 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
base_ormar_config = ormar. OrmarConfig (
    메타데이터 = sqlalchemy. 메타데이터(),
    데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
)


클래스 모델 테스트(ormar. 모델):
    ormar_config = base_ormar_config 사본()

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 200)
    URL: HttpUrl="https://www.example.com"

테스트 = 모델 테스트(이름 = "테스트")
주장test.name== "테스트"
테스트.url=="https://www.example.com"

테스트.url="https://www.sdta.ada.pt"
테스트.url=="https://www.sdta.ada.pt"

기다려test.save()
test_Check = ModelTest.ts.get ()

주장test_check.name== "테스트"
# 로딩 후 기본값으로 돌아갑니다
주장 test_Check url=="https://www.example.com"

기본 공장 기능

기본 _공장 함수를 설정하면 함수 호출의 결과가 초기화 시 설정되고 데이터베이스가 로드될 때마다 설정됩니다.

 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
40
41
42
43
pydantic에서 가져온 필드, PaymentCardNumber
# ...


base_ormar_config = ormar. OrmarConfig (
    메타데이터 = sqlalchemy. 메타데이터(),
    데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
)


CARD_NUMBERS = [
    "123456789007",
    "123456789015",
    "123456789023",
    "123456789031",
    "123456789049",
]


Def get_번호():
    랜덤 선택 반환(CARD_NUMBERS)


클래스 모델 테스트2(ormar. 모델):
    ormar_config = base_ormar_config 사본()

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 200)
    # 함수를 호출하지 않고 참조만 전달합니다.
    번호: PaymentCardNumber = 필드(기본값 _ 공장 = get_ 번호)

# 여전히 가치를 제공할 수 있다는 점에 유의하십시오.
테스트 = 모델 테스트 2 (이름 = "테스트 2", 숫자 = "400000000002")
주장test.name== "테스트2"
테스트 주장 번호 == "4000000000000002"

기다려test.save()
test_Check = ModelTest2.ts.get ()

주장test_check.name== "테스트2"
# 로드 값이 CARD_NUMBERS 중 하나로 설정된 후
CARD_NUMBERS에서 test_Check 번호를 주장하십시오.
테스트 확인을 주장하십시오! = 테스트 번호

__init__ 사용자 지정 설정

슈퍼() init 메서드를 호출하기 전에 __init__() 메서드에서 이 필드에 대한 값을 제공할 수 있습니다.

 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
40
41
pydantic에서 가져온 기본 모델
# ...


base_ormar_config = ormar. OrmarConfig (
    메타데이터 = sqlalchemy. 메타데이터(),
    데이터베이스 = 데이터베이스. 데이터베이스(DATABASE_URL),
)


클래스 Pydantic테스트(기본 모델):
    Aa: str
    Bb: int


클래스 모델 테스트3(ormar. 모델):
    ormar_config = base_ormar_config 사본()

    # 사용자 지정 init 기능 제공
    Def__init__(자체, **kwargs):
        # 기본값 없이 필수 필드에 값을 추가합니다.
        Kwargs ["pydantic_est"] = Pydantic테스트 (aa = "랜덤", bb = 42)
        # ormar에게 전화하는 것을 잊지 마십시오. 모델 init!
        슈퍼(). __init__ (**kwargs)

    ID: int = ormar. 정수(prial_key = 참)
    이름: str = ormar. 문자열(max_long = 200)
    pydantic_est: pydantic테스트

테스트 = 모델 테스트3 (이름 = "테스트3")
주장test.name== "테스트3"
테스트를 주장합니다.pydantic_test.bb==42
테스트.pydantic.aa = "새로운 가치"
테스트.pydantic.aa== "새로운 가치"를 주장하십시오.

기다려test.save()
test_Check = 기다림 ModelTest3.ts.get ()

주장test_check.name== "테스트3"
# 로딩 후 init에 제공된 값으로 돌아갑니다.
주장 test_Check pydantic_test== "랜덤"

!!!경고: 위의 방법 중 하나로 값을 제공하지 않으면 데이터베이스에서 로드할 때 유효성 검사 오류가 발생합니다.