Alleen pydantische velden
Met Ormar kunt u normale pydantische velden in zijn model declareren, zodat u toegang heeft tot alle basis- en aangepaste pydantische velden zoals str, int, HttpUrl, PaymentCardNumber en meer.
U kunt zelfs velden declareren die leiden tot alleen-geneste Pydantische modellen, in plaats van alleen individuele velden.
Aangezien deze velden niet zijn opgeslagen in de database (daar gaan deze velden over), moet u ze een betekenisvolle waarde geven, hetzij door een standaardwaarde in te stellen, hetzij tijdens modelinitialisatie.
Als Ormar de waarde van een pydantisch veld niet kan oplossen, mislukt het tijdens het laden van gegevens uit de database en ontbreekt het aan de waarde die vereist is voor het gedeclareerde pydantische veld.
De opties voor het opgeven van waarden worden hieronder beschreven.
Natuurlijk kunt u sommige of allemaal combineren tot één model.
optioneel veld
Als het veld is ingesteld op optioneel, wordt het standaard ingesteld op "none" als het niet wordt opgegeven, wat precies is wat er gebeurt tijdens het laden vanuit de database.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 | basis _ ormar _ config = ormar. OrmarConfig (
Metadata = sqlalchemie. MetaData (),
Database = databanken. Database (DATABASE _ URL),
)
Klasse ModelTest (ormar. Model):
ormar _ config = basis _ ormar _ config kopie ()
Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
Naam: str = ormar. String (max _ length = 200)
Aantal: Optioneel [PaymentCardNumber]
Test = ModelTest (naam = "Test")
Beweren test.name = = "Test"
Bevestig test. nummer is Geen
Test.nummer = "123456789015"
test.save ()
test _ check = afwachten ModelTest.objects.get ()
Beweren test_check.name = = "Test"
# na het laden is het terug naar Geen
Beweren test _ check nummer is Geen
|
Velden met standaardwaarden
Door een standaardwaarde in te stellen, wordt deze waarde ingesteld tijdens initialisatie en het laden van de database. Merk op dat het instellen van de standaardwaarde op "None" hetzelfde is als het instellen van dit veld op "Optioneel".
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 | basis _ ormar _ config = ormar. OrmarConfig (
Metadata = sqlalchemie. MetaData (),
Database = databanken. Database (DATABASE _ URL),
)
Klasse ModelTest (ormar. Model):
ormar _ config = basis _ ormar _ config kopie ()
Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
Naam: str = ormar. String (max _ length = 200)
Url: HttpUrl = "https://www.example.com"
Test = ModelTest (naam = "Test")
Beweren test.name = = "Test"
Bevestig test.url = = "https://www.example.com"
Test.url = "https://www.sdta.ada.pt"
Bevestig test.url = = "https://www.sdta.ada.pt"
test.save ()
test _ check = afwachten ModelTest.objects.get ()
Beweren test_check.name = = "Test"
# na het laden is het weer standaard
Test _ check url = = "https://www.example.com"
|
Standaard fabrieksfunctie
Door de standaardfunctie\ _ factory in te stellen, wordt het resultaat van de functieaanroep ingesteld bij initialisatie en elke keer dat de database wordt geladen.
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 | Velden geïmporteerd uit pydantic, PaymentCardNumber
# ...
basis _ ormar _ config = ormar. OrmarConfig (
Metadata = sqlalchemie. MetaData (),
Database = databanken. Database (DATABASE _ URL),
)
KAARTNUMMERS = [
"123456789007",
"123456789015",
"123456789023",
"123456789031",
"123456789049",
]
Def krijgen _ nummer ():
Retourneer random.choice (KAART _ NUMMERS)
Klasse ModelTest2 (ormar. Model):
ormar _ config = basis _ ormar _ config kopie ()
Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
Naam: str = ormar. String (max _ length = 200)
# let op dat je de functie niet aanroept, alleen referenties doorgeven
Nummer: PaymentCardNumber = Veld (standaard _ factory = get _ nummer)
# let op dat je nog WEL een waarde kan geven
Test = ModelTest2 (naam = "Test2", nummer = "4000000000000002")
test.name = = "Test2"
Bevestig test.nummer = = "4000000000000002"
test.save ()
test _ check = afwachten ModelTest2.objects.get ()
test_check.name = = "Test2"
# nadat de laadwaarde is ingesteld op een van de CARD _ NUMBERS
Test _ controleer nummer in CARD _ NUMBERS
Bevestig test _ check! = test.nummer
|
\ __init_\ _ aangepaste instellingen
U kunt een waarde voor dit veld opgeven in de\ __init_\ _ () methode voordat u de super () init methode aanroept.
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 | BaseModel geïmporteerd uit pydantic
# ...
basis _ ormar _ config = ormar. OrmarConfig (
Metadata = sqlalchemie. MetaData (),
Database = databanken. Database (DATABASE _ URL),
)
Klasse PydanticTest (BaseModel):
Aa: str
Bb: int
Klasse ModelTest3 (ormar. Model):
ormar _ config = basis _ ormar _ config kopie ()
# geef uw aangepaste init-functie
Def _ _ init _ _ (zelf, * * kwargs):
# waarde toevoegen voor verplicht veld zonder standaardwaarde
Kwargs ["pydantische _ test"] = pydantische test (aa = "willekeurig", bb = 42)
# vergeet niet om ormar te bellen. Model init!
Super (). _ _ init _ _ (* * kwargs)
Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
Naam: str = ormar. String (max _ length = 200)
pydantische _ test: pydantische test
Test = ModelTest3 (naam = "Test3")
Beweren test.name = = "Test3"
Bevestig test. pydantic_test.bb = = 42
Test.pydantic.aa = "nieuwe waarde"
Bevestig test.pydantic.aa = = "nieuwe waarde"
test.save ()
test _ check = afwachten ModelTest3.objects.get ()
Beweren test_check.name = = "Test3"
# na het laden is het terug naar de waarde in init
Test _ check pydantische _ test = = "willekeurig" bevestigen
|
!!!Waarschuwing: als u geen waarde op een van de bovenstaande manieren opgeeft, wordt er een ValidationError gegenereerd bij het laden vanuit de database.