Ga naar inhoud

Release Notities

0.20.1

✨ grote veranderingen

  • Merk op dat dit de eerste niet-bètaversie van ormar is met ondersteuning voor Pydantic v2. Controleer 0.20.0 release notes en https://collerek.github.io/ormar/0.20.0b1/migration/

🐛 reparatie

  • Fix samenvoegen van hetzelfde doelmodel bij gebruik van select\ _ lated en prefetch\ _ lated # 906
  • Probleem opgelost met betrekking tot PK-only modellen # 812
  • Fix het toevoegen van dezelfde relatie meerdere keren zal corrumperen de relatie cache # 1335

✨ functie

  • Sta het toevoegen van buitenlandse sleutelindexen toe via @ cmflynn # 1276

💬andere

  • @ Chaoyingz heeft wat documentatie gerepareerd, bedankt!

0.20.0

✨ grote veranderingen

  • Omar, modelconfiguratie

    Nu vereist elk ormar-model een ormar\ _ config-parameter, die een instantie is van de OrmarConfig-klasse, in plaats van de Meta-klasse te definiëren. Merk op dat de eigenschap de naam ormar\ _ config moet hebben en een instantie van de config-klasse moet zijn.

     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
    Databanken importeren
    Ormar importeren
    Sqlalchemie invoeren
    
    Database = databanken. Database ("sqlite: / / db.sqlite")
    Metagegevens = sqlalchemie. MetaData ()
    
    # ormar < 0,20
    Klasse Album (ormar. Model):
        Klasse Meta:
            Database = database
            Metagegevens = metagegevens
            Tablename = "albums"
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
        Favoriet: bool = ormar. Booleaans (standaard = onwaar)
    
    # ormar > = 0,20
    Klasse AlbumV20 (ormar. Model):
        ormar _ config = ormar. OrmarConfig (
            Database = databank,
            metagegevens = metagegevens;
            Tafelnaam = "albums _ v20"
        )
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
        Favoriet: bool = ormar. Booleaans (standaard = onwaar)
    
  • OrmarConfig api / parameters

    Ormar\ _ config geeft dezelfde set instellingen weer als de Meta-klasse. Dit betekent dat u de configuratie kunt initialiseren met een van de volgende parameters:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    Metadata: Optioneel [sqlalchemy. MetaData]
    Database: Optioneel [databanken. Database]
    Motor: Facultatief [sqlalchemy.engine]
    Tafelnaam: Optioneel [str]
    volgorde _ door: Optioneel [Lijst [str]]
    Samenvatting: bool
    _ ouder _ velden uitsluiten: Optioneel [Lijst [str]]
    queryset _ class: Soort [QuerySet]
    Extra: Extra
    Beperkingen: Optioneel [Lijst [ColumnCollectionConstraint]]
    
  • BaseMeta-equivalenten - Beste praktijken

    Houd er rekening mee dat om codeduplicatie te verminderen en de ontwikkeling te vereenvoudigen, het nog steeds wordt aanbevolen om een basisconfiguratie te maken en een kopie van elk model te verstrekken. OrmarConfig biedt hiervoor een handige replicatiemethode.

    De kopieermethode heeft dezelfde argumenten als de OrmarConfig init, dus u kunt indien nodig overschrijven, maar standaard retourneert het de bestaande eigenschappen, behalve tablename, order\ _ by en beperkingen die standaard worden gewist.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Databanken importeren
    Ormar importeren
    Sqlalchemie invoeren
    
    basis _ ormar _ config = ormar. OrmarConfig (
        Database = databanken. Database ("sqlite: / / db.sqlite"),
        Metagegevens = sqlalchemie. MetaData ()
    )
    
    Klasse AlbumV20 (ormar. Model):
        ormar _ config = basis _ ormar _ config kopie (
            Tafelnaam = "albums _ v20"
        )
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
    
    Klasse TrackV20 (ormar. Model):
        ormar _ config = basis _ ormar _ config kopie (
            Tafelnaam = "tracks _ v20"
        )
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
    
  • Opties veldparameters worden niet langer ondersteund.

    Voorafgaand aan versie 0.20 kon u optieargumenten geven aan elk bestaand ormar-veld om acceptabele waarden te beperken. Deze functie is verwijderd en u moet het ormar gebruiken. Enum-veld dat voor dit doel is ontworpen. Als u databaseveldtypen (d.w.z. gehele velden) wilt behouden, kunt u altijd een aangepaste validator schrijven.

     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
    Databanken importeren
    Ormar importeren
    Sqlalchemie invoeren
    
    Database = databanken. Database ("sqlite: / / db.sqlite")
    Metagegevens = sqlalchemie. MetaData ()
    
    # ormar < 0,20
    Klasse Artiest (ormar. Model):
        Klasse Meta:
            Database = database
            Metagegevens = metagegevens
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
        Land: str = ormar. String (standaard = Onwaar, max _ length = 50, keuzes = ["UK", "US", "Vietnam", "Colombia"])
    
    # ormar > = 0,20
    Enum import uit enum
    
    Klasse Land (str, Enum):
        VK = "VK"
        VS = "VS"
        VIETNAM = "Vietnam"
        COLOMBIA = "Colombia"
    
    Klasse ArtiestenV20 (ormar. Model):
        ormar _ config = ormar. OrmarConfig (
            Database = databank,
            metagegevens = metagegevens;
            Tablename = "artiesten _ v20"
        )
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
        Land: Land = ormar. Enum (enum _ klasse = Land)
    
  • Pydantic\ _ ondersteunt alleen geen veldparameters meer

    Het veld pydantic\ _ only is verouderd en verwijderd in v 0.20. Ormar staat toe dat pydantische velden worden gedefinieerd als normale pydantische modellen.

     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
    Databanken importeren
    Ormar importeren
    Sqlalchemie invoeren
    
    Database = databanken. Database ("sqlite: / / db.sqlite")
    Metagegevens = sqlalchemie. MetaData ()
    
    # ormar < 0,20
    Klasse Schotel (ormar. Model):
        Klasse Meta:
            Database = database
            Metagegevens = metagegevens
            Tafelnaam = "schotels"
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
        Koken: str = ormar. String (max _ length = 40, pydantic _ only = Waar, standaard = "sam")
    
    # ormar > = 0,20
    Klasse DishV20 (ormar. Model):
        ormar _ config = ormar. OrmarConfig (
            Database = databank,
            metagegevens = metagegevens;
            Tafelnaam = "gerechten _ v20"
        )
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
        Kok: str = "sam" # dit is een normaal pydantisch veld
    
  • Ondersteunt niet langer eigenschap\ _ velddecorateurs

    De eigenschap\ _ field decorator wordt gebruikt om een manier te bieden om berekende velden door te geven die zijn opgenomen in de woordenboek / geserialiseerde JSON-weergave van het model. De Pydantic 2. X-versie introduceerde deze mogelijkheid, dus u moet nu overschakelen naar de Pydantic native-versie.

     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
    Databanken importeren
    Ormar importeren
    Sqlalchemie invoeren
    Pydantische invoer
    
    Database = databanken. Database ("sqlite: / / db.sqlite")
    Metagegevens = sqlalchemie. MetaData ()
    
    # ormar < 0,20
    Klasse Medewerker (ormar. Model):
        Klasse Meta:
            Database = database
            Metagegevens = metagegevens
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        voornaam: str = ormar. String (max _ length = 100)
        achternaam: str = ormar. String (max _ length = 100)
    
        @ Ormar.property _ veld ()
        Def volledige _ naam (zelf) - > str:
            Geeft f "{self.first_name}{self.last_name}" terug
    
    # ormar > = 0,20
    Klasse MedewerkerV20 (ormar. Model):
        ormar _ config = ormar. OrmarConfig (
            Database = databank,
            metagegevens = metagegevens;
        )
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        voornaam: str = ormar. String (max _ length = 100)
        achternaam: str = ormar. String (max _ length = 100)
    
        @ Pydantisch berekend _ veld ()
        Def volledige _ naam (zelf) - > str:
            Geeft f "{self.first_name}{self.last_name}" terug
    
  • verouderde methode

    Alle onderstaande methoden zijn verouderd en worden verwijderd in versie 0.30 van Ormar.

    • Dict () wordt model\ _ dump ()

      Databanken importeren Ormar importeren Sqlalchemie invoeren

      Database = databanken. Database ("sqlite: / / db.sqlite") Metagegevens = sqlalchemie. MetaData ()

      Klasse Album (ormar. Model): ormar _ config = ormar. OrmarConfig ( Database = databank, metagegevens = metagegevens; Tablename = "albums" )

      1
      2
      3
      Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
      Naam: str = ormar. String (max _ length = 100)
      Favoriet: bool = ormar. Booleaans (standaard = onwaar)
      

      Album = Album (naam = "Donkere kant van de maan")

      ormar < 0,20

      album _ dict = album.dict ()

      ormar > = 0,20

      nieuw _ album _ dict = album.model _ dump ()

    Houd er rekening mee dat de parameters hetzelfde blijven, d.w.z. opnemen, uitsluiten, enz.

    • JSON () wordt model\ _ dump\ _ json ()

       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
      Databanken importeren
      Ormar importeren
      Sqlalchemie invoeren
      
      Database = databanken. Database ("sqlite: / / db.sqlite")
      Metagegevens = sqlalchemie. MetaData ()
      
      Klasse Album (ormar. Model):
          ormar _ config = ormar. OrmarConfig (
              Database = databank,
              metagegevens = metagegevens;
              Tablename = "albums"
          )
      
          Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
          Naam: str = ormar. String (max _ length = 100)
          Favoriet: bool = ormar. Booleaans (standaard = onwaar)
      
      Album = Album (naam = "Donkere kant van de maan")
      
      # ormar < 0,20
      album _ json = album.json ()
      
      # ormar > = 0,20
      nieuw _ album _ dict = album.model _ dump _ json ()
      

      Houd er rekening mee dat de parameters hetzelfde blijven, d.w.z. opnemen, uitsluiten, enz.

    • Construct () wordt model\ _ construct ()

      Databanken importeren Ormar importeren Sqlalchemie invoeren

      Database = databanken. Database ("sqlite: / / db.sqlite") Metagegevens = sqlalchemie. MetaData ()

      Klasse Album (ormar. Model): ormar _ config = ormar. OrmarConfig ( Database = databank, metagegevens = metagegevens; Tablename = "albums" )

      1
      2
      3
      Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
      Naam: str = ormar. String (max _ length = 100)
      Favoriet: bool = ormar. Booleaans (standaard = onwaar)
      

      Params = { "Naam": "Donkere Kant van de Maan", "Favorieten": Waar, }

      ormar < 0,20

      Album = Album.construct (* * delen)

      ormar > = 0,20

      Album = model _ construct (* * delen)

    Raadpleeg de Pydantische documentatie voor meer informatie over constructies.

0.12.2

# #✨ functies

  • Upgrade FastAPI-ondersteuning naar de nieuwste versie (0.97.0) # 1110
  • Ondersteuning toevoegen en testen voor Python 3.11 # 1110

0.12.1

# #✨ functies

  • Door recursief laden en cachen van modellen en gerelateerde modellen zijn de prestaties van laadmodellen sterk verbeterd. (@ erichaydel - bedankt!) # 853

# #💬 interne structuur

  • Benchmark voor het vergelijken van de prestatie-effecten van geïmplementeerde trendveranderingen (nogmaals, door @ erichaydel - bedankt!) # 853

0.12.0

✨ grote veranderingen

  • Queryset.bulk\ _ create zal nu ModelListEmptyError verhogen op de lege modellijst (door @ ponytailer - bedankt!) # 853

# #✨ functies

  • Model.upsert () verwerkt nu een vlag\ \ _ force_save_\ : bool, waardoor de invoegmodellen kunnen worden bijgewerkt, ongeacht of ze een primaire sleutelset hebben. Houd er rekening mee dat het instellen van deze vlag resulteert in twee zoekopdrachten voor elk bijgewerkt model - > controleer of het model bestaat en update / voeg dienovereenkomstig later in

# #🐛 fix

  • Een lege relatie gerepareerd die de constructeur brak (door @ Abdeldjalil-H - bedankt!) # 870
  • Een probleem met opslaan oplossen waarbij modellen met pks-set (inclusief uuids) # 885 niet worden opgeslagen
  • Herstel verkeerde relatie-uitsluitingen op basis van uitsluitingsopdracht # 779
  • Fix eigenschap\ _ velden niet correct overgenomen # 774

0.11.3

# #✨ functies

  • registreert onupdate en ondelete referentiebewerkingen in ForeignKey en biedt een ReferentialAction-opsomming om het gedrag van een relatie te specificeren (door @ SepehrBazyar - bedankt!) # 724
  • CheckColumn toevoegen aan ondersteunde beperkingen in Model Meta (door @ SepehrBazyar - Bedankt!) # 729

# #🐛 fix

  • Fix het beperken van queryresultaten tot 0 zou een lege lijst moeten retourneren (door @ SepehrBazyar - bedankt!) # 766

# #💬 anderen

  • Donkere modus toevoegen aan documentatie (door @ SepehrBazyar - Bedankt!) # 717
  • Bijwerken aiomysql afhankelijkheden # 778

0.11.2

# #🐛 fix

  • Het repareren van databasestuurprogramma 's is vereist en deze moeten optioneel zijn.
  • Fix Booleaans veldprobleem in limietquery zonder limiet\ _ raw\ _ sql vlag in postgres # 704
  • Fix enum\ _ class overflow naar schema veroorzaakt fout in OpenAPI # 699

0.11.1

# #🐛 fix

  • Probleem met diepe replicatie opgelost dat is geïntroduceerd in Pydantic 1.9 # 685

0.11.0

✨ grote veranderingen

  • Drop ondersteuning voor Python 3.6
  • Queryset.get\ _ or\ _ create Nu retourneert een tuple met het model en een boolean die aangeeft of het model is gemaakt (door @ MojixCoder - bedankt!) # 554
  • Queryset.count () telt nu standaard het aantal verschillende bovenliggende modelrijen, u kunt alle rijen tellen door uniek = Onwaar in te stellen (door @ erichaydel - bedankt) # 588

# #✨ functies

  • Ondersteuning toegevoegd voor Python 3.10

# #🐛 fix

  • Inconsistent JSON-veldgedrag oplossen in opslaan en bulk\ _ create # 584
  • Fix Maximale terugvalfout # 580

0.10.25

# #✨ functies

  • voegt queryset\ _ class optie toe aan Model. Meta, waardoor het gemakkelijk is om QuerySet te vervangen door uw model (door @ ponytailer - bedankt!) # 538 Met* kunnen extra kwargs worden doorgegeven aan IndexColumns, die worden doorgegeven aan de sqlalchemy Index (door @ zevisert - bedankt) # 575

# #🐛 fix

  • Nullable-instelling voor JSON-veld # 529 repareren
  • corrigeert bytes / str-mismatch in batchbewerkingen bij het gebruik van orjson in plaats van json (door @ ponytailer - bedankt!) # 538

0.10.24

# #✨ functies

  • Voeg bericht\ _ bulk\ _ update-signaal toe (door @ ponytailer - bedankt!) # 524

# #🐛 fix

  • Fix ondersteuning voor pydantic = = 1.9.0 # 502
  • Fix tijdzone probleem voor datum en tijd # 504
  • Verwijder letterlijke binding bij het genereren van query 's om postgres-array # / tophat /ormar-postgres-extensions/ 9 te ontgrendelen
  • Fix batch-update van JSON-velden # 519

# #💬 anderen

  • verbetert de prestaties van bulk\ _ create door de database te omzeilen en veel suboptimale implementatie uit te voeren. (@ Mng-dev-ai Bedankt!) # 520
  • Impactminuten. De vereiste databaseversie is > = 5.4.

0.10.23

# #✨ functies

  • Mogelijkheid toegevoegd om opmerkingen door te geven aan sqlalchemy bij het maken van kolommen # 485

# #🐛 fix

  • Fix LargeBinary velden die leeg kunnen zijn # 409
  • Ormar maken. Model beschikbaar # 413
  • Maak eerst () en krijg () respecteer de volgorde van het hoofdmodel dat door de gebruiker is ingesteld zonder parameters, fallback naar de primaire sleutel (respectievelijk asc en desc) # 453
  • Herstel onjuiste verwijzing naar niet-alias join-clausule in postgress # 455

0.10.22

# #🐛 fix

  • Hot fix voor validators die niet worden overgenomen bij het instellen van ouder ormar model # 365

0.10.21

# #🐛 fix

  • voegt een ormar-implementatie toe van de constructor class-methode, waarmee modelinstanties kunnen worden gebouwd zonder invoer te valideren, om het hele proces te versnellen (als uw gegevens al zijn gevalideerd) # 318
  • lost een probleem op met het "erven" van veldvalidatoren van ormar-modellen bij het genereren van nieuw gemaakte pydanische modellen met get\ _ pydantic # 365

0.10.20

# #✨ functies

  • voegt een extra parameter toe aan het model. Meta die Extra.ignore en Extra.forbid (standaard) accepteert en de extra velden die aan het ormamodel zijn doorgegeven negeert, of een uitzondering genereert wanneer deze een uitzondering tegenkomt # 358

# #🐛 fix

  • "None" is niet toegestaan als het veld nullable is en opties # 354 zijn ingesteld
  • Ongeacht automatische verhoging en expliciete nullable-instellingen, stel Primary\ _ key altijd in op non-null om migratieproblemen te voorkomen # 348

0.10.19

# #✨ functies

  • Ondersteuning toegevoegd voor niet-unieke IndexColumns met meerdere kolommen in Meta.stricints # 307
  • voegt sql\ _ nullable field attribuut toe om verschillende nullable instellingen toe te staan voor pydantische modellen en onderliggende sql kolommen # 308

# #🐛 fix

  • Schakel diagramcaching in om de prestaties te verbeteren # 337
  • Verduidelijk en repareer documentatie op nullable velden # 339

# #💬 anderen

  • Upgrade de ondersteunde databaseversie naar < = 5.2.

0.10.18

# #🐛 fix

  • Fix veldorde in pydantisch model # 328
  • Reparatie database 0.5.0 # 142

0.10.17

# #✨ functies

  • Het standaard pydantische type dat overheersende modelvelden # 312 toestaat
  • Ondersteuning toegevoegd voor sqlalchemy > = 1.4 (vereist database > = 0.5.0) # 142

0.10.16

# #✨ functies

Met* kunt u uw eigen pydantische configuratie doorgeven aan ormar. Model, dat wordt samengevoegd met de standaardconfiguratie door @ naturalethic (bedankt!) # 285 * SmallInteger-veldtypen toevoegen via @ ProgrammerPlus1998 (bedankt!) # 297

# #🐛 fix

  • Oplossing voor het genereren van OpenAPI-schema door verouderde pydantische veldparameters te verwijderen die direct in schema # 291 zijn weergegeven
  • Herstel onnodige waarschuwingen die automatisch worden gegenereerd via het model # 295

0.10.15

# #🐛 fix

  • Probleem opgelost met het genereren van pydantische modelbomen met behulp van geneste modellen (door @ pawamoy - bedankt!) # 278
  • Herstel ontbrekende f-string in waarschuwing over ontbrekend primair sleutelveld # 274
  • Vaste doorgeven van buitenlandse sleutelwaarden als relaties (aanvullende bescherming, opgelost in de nieuwste versie) # 270

0.10.14

# #✨ functies

  • staat het doorgeven van de tijdzone: bool = False parameter aan de DateTime en Time velden van een tijdzone-bewuste database kolom # 264
  • maakt het mogelijk datumtijd, datum en tijd door te geven voor filtering op DateTime, Time en Date-velden om filtering op datetime mogelijk te maken in plaats van waarden te converteren naar strings # 79

# #🐛 fix

  • Los afhankelijkheden op van psycopg2 naar psycopg2-binair # 255

0.10.13

# #✨ functies

  • staat het doorgeven van veldaccessoires toe in select\ _ lated en prefetch\ _ lated. Python-stijl select\ _ gerelateerd # 225.

    • Voor:

      afwachten Post.objects.select _ gerelateerd (["auteur", "categorieën"]) .get () afwachten Auteur.objects.prefetch _ gerelateerd ("berichten _ _ categorieën") .get ()

    • Nu ook:

      Wacht op Post.objects.select _ gerelateerd ([Post.author, Post.categorieën]) .get () afwachten Auteur.objects.prefetch _ gerelateerd (Auteur.posts.categorieën) .get ()

# #🐛 fix

  • Overschrijdende standaardwaarden voor overgeërfde primaire sleutels # 253 verhelpen

0.10.12

# #🐛 fix

  • Fix QuerySet.create-methode die init niet gebruikt (als aangepast is) # 245
  • Fix ForwardRefManyToMany relatie-instelling verkeerd pydantisch type # 250

0.10.11

# #✨ functies

  • voegt waarden en waarden\ _ list toe aan QuerySet en QuerysetProxy, waardoor de oorspronkelijke gegevensbron kan worden geretourneerd vanuit query # 223.
    • Hiermee kan een lijst met tuples of woordenboeken uit een zoekopdracht worden geretourneerd
    • Sla het ontleden van de gegevens over in een ormatiemodel en sla daarom validatie over
    • Staat de uitsluiting van modellen tussen relationele ketens toe, zodat u alleen de vereiste kolommen kunt extraheren
    • Als slechts één kolom wordt geëxtraheerd, kunt u met waarden\ _ list het resultaat afvlakken.

# #🐛 fix

  • Opgelost met ForwardRef # 226 om automatisering te creëren via het m2m relationele model

0.10.10

# #✨ functies

  • voegt de get\ _ pydantic-vlag toe, zodat u automatisch een equivalente pydantische modelboom uit ormar kunt genereren. Model. Deze nieuw gegenereerde modelboom kan worden gebruikt in verzoeken en antwoorden om velden uit te sluiten die u niet in uw gegevens wilt opnemen.
  • voegt een behalve\ _ ouder\ _ velden parameter toe aan het model Meta, zodat u velden tijdens overerving kunt uitsluiten van het bovenliggende model. Houd er rekening mee dat het het beste is om modellen en mixins te combineren, maar als u veel vergelijkbare modellen en slechts één ander model heeft, kan dit een handig hulpmiddel zijn om dit doel te bereiken.

# #🐛 fix

  • Een leeg filter gerepareerd met paging en relaties (met dank aan @ erichaydel) # 214
  • Oplossing indien niet opgeslagen vóór # 216, worden onderliggende objecten niet opgeslagen aan de achterkant van de relatie

# #💬 anderen

  • Vouw het FastAPI-gedeelte van de documentatie uit om voorbeelden te tonen van het gebruik van Ormar in FastAPI-verzoeken en -reacties.
  • Verbeterde documentatie over standaardwaarden, ForeignKey.add en meer.

0.10.9

# # Belangrijke beveiligingsoplossingen

  • Pydantische pinnen bijwerken om beveiligingsfouten op te lossen CVE-2021-29510

Het wordt aanbevolen om bij te werken naar een gepatchte versie van pydantic. In 0.10.9 sluit ormar versies met kwetsbaarheden in vaste afhankelijkheden uit.

# #🐛 fix

  • OpenAPI-architectuur # 204 van LargeBinary repareren

0.10.8

# #🐛 fix

  • Standaardwaarden voor opvulling repareren in pk\ _ only submodel # 202
  • Fix mypy # 199 voor LargeBinary velden met behulp van base64 str representatie
  • Fix OpenAPI schema formaat voor LargeBinary velden met Base64 str representatie # 199
  • Fix OpenAPI-selectiecodering voor LargeBinary-velden met Base64 str-representatie

0.10.7

# #✨ functies

  • Voegt de exclude_primary_keys: bool = False-tag toe aan de dict () -methode, waardoor alle primaire sleutelkolommen in het resulterende woordenboek kunnen worden uitgesloten. Hoofdstuk 164
  • voegt de vlag van exclude_through_models: bool = False dict () toe, waardoor alle modellen kunnen worden uitgesloten van ManyToMany-relaties # 164
  • represent_as_base64_str: bool = False toegevoegd om het converteren van byte LargeBinary-velden naar base64-gecodeerde stringparameters mogelijk te maken. Bij het openen van eigenschappen wordt de string geretourneerd in dict () en wordt de string geconverteerd naar bytes wanneer deze is ingesteld. Gegevens in de database worden opgeslagen in bytes. Hoofdstuk 187
  • Voeg pk-aliassen toe om Model.pk toegang te geven tot velden in filters en te ordenen op clausules (python-stijl)

# #🐛 fix

  • Standaard verwijderen Geen optie voor max\ _ lengte van LargeBinary veld # 186
  • Standaard verwijderen Geen optie voor tekenreeksveld max\ _ length

# #💬 anderen

  • Richtlijnen en voorbeelden voor het verstrekken van de dict () parameter in de documentatie
  • De belangrijkste refactoring van het verkrijgen / instellen van eigenschappen in magische methoden naar descriptoren - > significante prestatieverbeteringen

0.10.6

# #✨ functies

  • Voeg LargeBinary (max\ _ length) veldtype # 166 toe

  • voegt ondersteuning toe voor normale Pydantische velden (inclusief modellen) in plaats van het kenmerk Pydantic\ _ only, dat nu verouderd is # 160. Pydantische velden moeten net zo normaal worden gedeclareerd als in het pydantische model naast het ormarveld. Merk op dat (uiteraard) ormar de waarde van dit veld niet opslaat en laadt in de database, wat betekent dat een van de volgende waar moet zijn:

    • Pydantische velden die op het ormar-model zijn gedeclareerd, moeten optioneel zijn (standaard is Geen).
    • Het pydantische veld moet worden ingesteld op een standaardwaarde
    • Pydantisch veld heeft standaard\ _ fabrieksfunctie ingesteld
    • Een ormar. Model met een pydantisch veld moet\ __init_\ _ () overschrijven en daar een waarde

    Als geen van de bovenstaande ormar (of liever pydantisch) faalt tijdens het laden van gegevens uit de database en de vereiste waarde voor het aangegeven pydantische veld ontbreekt.

  • Ormar geeft nu zinvolle voorbeelden in het openapi-patroon, inclusief geneste modellen. Gebruik dezelfde algoritmen als dict () en select / load\ _ all om het relevante model te herhalen zonder te kijken. Voorbeelden verschijnen ook in fastapi. Hoofdstuk 157

# #🐛 fix

  • Pydantic valideert standaard geen velden tijdens allocatie, wat geen ideale instelling is voor ORM. Nu alle ormar. Modellen hebben validatie ingeschakeld tijdens allocatie (bijv. model.column = 'value').

# #💬 anderen

  • Voeg een verbinding toe aan de database in QuickStart in readme # 180 De* OpenAPI-architectuur bevat niet langer de ormar. Modeldocumentreeks als beschrijving, als u geen eigen documentreeks opgeeft, alleen de modelnaam.
  • Enkele prestatieverbeteringen.

0.10.5

# #🐛 fix

  • Bug repareren in fastapi-paginering # 73
  • verwijdert onnodige optie # 174 uit lijst\ [optioneel\ [T]] in QuerySet.all () en Querysetproxy.all () retourwaarden
  • Dekkingspercentages voor runtests worden alleen vrijgegeven op interne PRS, niet in GitHub-bewerkingen.

0.10.4

# #✨ functies

  • Python-stijl toevoegen filter en order_by Gebruik veldtoegang in plaats van door dunder gescheiden strings. Hoofdstuk 51
    • Toegang tot velden via eigenschapstoegang (dot chain) kan worden gebruikt om FilterGroups (ormar.and_ En ormar ook._)
    • -veldtoegang overbelast een set Python-operators en biedt een set functies om dezelfde functionaliteit mogelijk te maken als de door dunder gescheiden parameternamen in**kwargs, wat betekent dat uit het voorbeeldmodel Track gerelateerd aan modelalbum Nu heb je meer mogelijkheden:
      • Exact - exacte overeenkomst met waarde, sql kolom =
        • oud: album\ __naam_\ _ exact = 'Malibus'
        • Nieuw: kan ook geschreven worden als Track.album.name = = 'Malibu
      • iexact - exacte overeenkomst sql kolom =(hoofdletterongevoelig)
        • oud: album\ __naam_\ _ iexact = 'malibus'
        • Nieuw: kan ook geschreven worden als Track.album.name.iexact('malibu')
      • bevat - sql kolom ZOALS '%%'
        • Oud: album\ __Naam_\ _ bevat = 'Man'
        • Nieuw: kan ook geschreven worden als Track.album.name% 'Mal')
        • Nieuw: kan ook geschreven worden als Track.album.name.contains('Mal')
      • icontains - sql kolom LIKE '%%' (hoofdletterongevoelig)
        • oud: album\ __naam_\ _ icontains = 'man'
        • Nieuw: kan ook geschreven worden als Track.album.name.icontains('mal')
      • In -sql column IN (<VALUE1>, <VALUE2>, ...)
        • Oud: album__name__in=['Malibu', 'Barclay']
        • Nieuw: kan ook geschreven worden als Track.album.name << ['Malibu', 'Barclay']
        • Nieuw: kan ook geschreven worden als Track.album.name.in_(['Malibu', 'Barclay'])
      • Isnull - sql kolom IS NULL (en sql kolom IS NIET NULL)
        • oud: album\ __naam__isnull = Waar (isnotnullalbum__naam_\ _ isnull = Onwaar)
        • Nieuw: kan ook geschreven worden als Track.album.name > > geen
        • Nieuw: kan ook geschreven worden als Track.album.name isnull (True)
        • Nieuw: niet null kan ook geschreven worden als Track.album.name.isnull(False)
        • Nieuw: niet null kan ook geschreven worden als ~ (Track.album.name > > None)
        • Nieuw: niet null kan ook geschreven worden als ~(Track.album.name.isnull(True))
      • gt - vierkante kolom >(groter dan)
        • Oud: positie\ _\ _ gt = 3
        • Nieuw: kan ook geschreven worden als Track.album.name > 3
      • gte - sql kolom > =(groter dan of gelijk aan)
        • Oud: positie\ _\ _ gte = 3
        • Nieuw: kan ook geschreven worden als Track.album.name > = 3
      • lt - vierkante kolom <(hieronder)
        • Oud: positie\ _\ _ lt = 3
        • Nieuw: kan ook geschreven worden als Track.album.name < 3
      • lte - sql kolom < =(kleiner dan of gelijk aan)
        • Oud: positie\ _\ _ lte = 3
        • Nieuw: kan ook geschreven worden als Track.album.name < = 3
      • startswith - sql kolom LIKE '%' (exacte start overeenkomst)
        • Oud: album\ __Naam_\ _ begint met = 'Man'
        • Nieuw: kan ook geschreven worden als Track.album.name.startswith('Mal')
      • istartswith - sql kolom LIKE '%' (hoofdletterongevoelig)
        • Oud: album__name__istartswith='mal'
        • Nieuw: kan ook geschreven worden als Track.album.name.istartswith('mal')
      • eindigt met - sql kolom LIKE '%' (volledige eindmatch)
        • : album\ __naam_\ _ eindigt met = 'ibus'
        • Nieuw: kan ook geschreven worden als Track.album.name.endswith('ibu')
      • iendswith - sql kolom LIKE '%' (hoofdletterongevoelig)
        • oud: album\ __naam_\ _ iendswith = 'IBU'
        • Nieuw: kan ook geschreven worden als Track.album.name.iendswith('IBU')
  • Je kunt FilterGroups niet alleen in filter () en behalve () aanbieden, maar ook in:
    • Krijgen ()
    • Krijgen of niet ()
    • Krijgen of maken ()
    • De eerste ()
    • Allemaal ()
    • Verwijderen ()
  • Via Filtergroepen (ormar.en_ En ormar ook._), kunt u nu gebruik maken van:
    • & - als en\ _ in plaats van nesten op het volgende niveau
    • | - als "of\ _" in plaats van nesting van het volgende niveau
    • ~ - als negatie van filtergroep
  • Gebruik & (sql AND) en | (sql OR) om meerdere filtersets in één set voorwaarden te combineren.

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    # Volgende queries zijn gelijkwaardig:
    # sql: (product.name = 'Test' EN product.rating > = 3.0)
    
    # ormar OPTIE 1 - OUDE
    Product.objects.filter (naam = 'Test', waardering _ _ gte = 3.0) .get ()
    
    # ormar OPTIE 2 - OUDE
    Product.objects.filter (ormar.and _ (naam = 'Test', waardering _ _ gte = 3.0)) .get ()
    
    # ormar OPTIE 3 - NIEUWE (veldtoegang)
    Product.objects.filter ((Product.name = = 'Test') & (Product.rating > = 3.0)) .get ()
    
  • Hetzelfde geldt voor geneste complexe filters

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    # Volgende queries zijn gelijkwaardig:
    # sql: (product.name = 'Test' EN product.rating > = 3.0)
    # OR (categories.name IN ('Speelgoed', 'Boeken')
    
    # ormar OPTIE 1 - OUDE
    Product.objects.filter (ofmar. of _ (
                              Ormar.and _ (naam = 'Test', waardering _ _ gte = 3.0),
                              categorieën _ _ naam _ _ in = ['Speelgoed', 'Boeken'])
                          ). krijgen ()
    
    # ormar OPTIE 2 - NIEUWE (in plaats van genest of met `|`)
    Product.objects.filter (
                          Ormar.and _ (naam = 'Test', waardering _ _ gte = 3.0) |
                          Ormar. en _ (categorieën _ _ naam _ _ in = ['Speelgoed', 'Boeken'])
                          ). krijgen ()
    
    # ormar OPTIE 3 - NIEUWE (veldtoegang)
    Product.objects.filter (
                          ((Product.name = 'Test') & (Product.rating > = 3.0)) |
                          (Product.categories.name < < ['Speelgoed', 'Boeken'])
                          ). krijgen ()
    
  • Nu kunt u ook veldtoegang gebruiken om OrderActions te bestellen\ _ by ()

    • In oplopende volgorde:
      • Oud: Product.objects.order_by("name").all()
      • Nieuw: Product.objects.order_by(Product.name.asc()).all()
    • Aflopende volgorde:
      • Oud: Product.objects.order_by("-name").all()
      • Nieuw: Product.objects.order_by(Product.name.desc()).all()
    • Natuurlijk kunt u ook verschillende modellen en vele bestellingen combineren\ _ door: Product.objects.order_by([Product.category.name.asc(), Product.name.desc()]).all()

🐛 reparatie

  • is niet echt een bug, maar een inconsistentie. Het voorzien van een filter met geneste modellen, d.w.z. album\ _category_\ _ name = 'AA', controleert of de album- en categoriemodellen zijn opgenomen in select_lated (), en zo niet, dan worden ze daar automatisch toegevoegd. Dezelfde functionaliteit werkt niet met FilterGroups (en_en of\ ), nu werkt het (werkt ook met Python-stijlfilters die FilterGroups retourneren).

0.10.3

✨ functie

  • foreignKey en ManyToMany ondersteunen nu skip\ _ reverse: bool = False flag # 118. Als je de skip\ _ reverse vlag intern instelt, is het veld nog steeds geregistreerd aan de andere kant van de relatie, dus je kunt:

    • Filteren op relevante modelvelden in het omgekeerde model
    • Bestellen\ _ door gerelateerde modelvelden in omgekeerd model

    Maar je kunt niet:

    • Gebruik gerelateerde\ _ naam om toegang te krijgen tot gerelateerde velden vanuit het omgekeerde model
    • Zelfs als u correlatie selecteert aan de achterkant van het model, wordt het geretourneerde model niet ingevuld in de omgekeerde instantie (blokkeert geen verbindingen, dus u kunt nog steeds filteren en bestellen\ _ by)
    • Deze relatie is niet bevolkt in dict () en json ()
    • kan geneste gerelateerde objecten niet doorgeven wanneer deze zijn ingevuld vanuit dict () of json () (ook via fastapi). Afhankelijk van aanvullende instellingen in de pydantische configuratie wordt deze genegeerd of wordt er een fout opgetreden.
    • Model.save\ _ lated () kan nu de hele data tree in een keer opslaan # 148 betekent:

    • Het weet of het mastermodel of gerelateerde modellen eerst moeten worden opgeslagen om de relatie te behouden

    • Het bespaart het mastermodel als

      • Het is niet bewaard gebleven.
      • Geen pk waarde
      • Of sla\ _ all = Ware vlag is ingesteld

      In deze gevallen hoeft u de opslag niet in twee oproepen te splitsen (opslaan () en opslaan\ _ lated ())

    • Het ondersteunt ook veel-op-veel relaties

    • Het ondersteunt ook optionele Through-modelwaarden voor m2m-relaties

  • De mogelijkheid toegevoegd om aan te passen door veldnamen voor modelrelaties.

  • Standaard staat de bijbehorende modelnaam in kleine letters bij de modelrelatienaam. Dus in een voorbeeld als dit:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    ... # # cursusaangifte weggelaten
    Klassestudent (ormar. Model):
        Klasse Meta:
            Database = database
            Metagegevens = metagegevens
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
        Cursussen = ormar. ManyToMany (Cursus)
    
    # # zal standaard produceren Door model als volgt (voorbeeld vereenvoudigd)
    Klasse StudentenCursus (ormar. Model):
        Klasse Meta:
            Database = database
            Metagegevens = metagegevens
            Tablename = "studenten _ cursussen"
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Student = ormar. ForeignKey (Student) # # standaardnaam
        Cursus = ormar. ForeignKey (Cursus) # standaardnaam
    
  • Om de veld- / relatienamen in het Through-model aan te passen, kunt u nu de nieuwe parameters van ManyToMany gebruiken:

    • Via\ _ relatie\ _ naam - veldnaam die leidt naar het model dat ManyToMany verklaart
    • Via\ _ reverse\ _ relatie\ _ naam - naar de veldnaam van het model waar ManyToMany naar toe leidt

    Voorbeeld:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    ... # cursusaangifte weggelaten
    Klassestudent (ormar. Model):
        Klasse Meta:
            Database = database
            Metagegevens = metagegevens
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        Naam: str = ormar. String (max _ length = 100)
        Cursussen = ormar. ManyToMany (Cursus,
                                   door _ relatie _ naam = "student _ id",
                                   door _ omgekeerde _ relatie _ naam = "cursus _ id")
    
    # zal standaard produceren Door model als volgt (voorbeeld vereenvoudigd)
    Klasse StudentenCursus (ormar. Model):
        Klasse Meta:
            Database = database
            Metagegevens = metagegevens
            Tablename = "studenten _ cursussen"
    
        Id: int = ormar. Geheel getal (primaire _ sleutel = waar)
        student _ id = ormar. ForeignKey (Student) # ingesteld door door _ relatie _ naam
        cursus _ id = ormar. ForeignKey (cursus) # ingesteld door via _ omgekeerde _ relatie _ naam
    

🐛 reparatie

  • Weinig probleem oplossen ReferenceError # 118
  • Bug verhelpen die door velden wordt gegooid bij het instellen van pydantic Config.extra = "verboden"
  • fix pydantic. PrivateAttr niet geïnitialiseerd bij\ __init_\ _ error # 149
  • corrigeert pydantic-type uitsluiting fout in dict () en\ __alle_\ _ sleutel werkt niet

💬andere

  • Link naar sqlalchemistry-to-ormar automatische vertaler voor het introduceren van modellen
  • Geef een link naar de FastAPI-ecosysteembibliotheek die ormar ondersteunt
  • Transacties aan het document toevoegen (database ondersteuning)

0.10.2

✨ functie

  • Model.save_related(follow=False) Nu worden ook twee extra parameters geaccepteerd: Model.save_related(follow=False, save_all=False, exclude=None) ...
    • save\ _ all: bool - > standaard (dus save\ _ all = False) ormar updates voegt alleen niet-opgeslagen modellen in (dus nieuwe of bijgewerkte modellen), bij save\ _ all = True worden alle gerelateerde modellen opgeslagen ongeacht de save state, dit is in de volgende gevallen Het kan handig zijn om het model bij te werken vanuit de API-aanroep, zodat het niet verandert op de backend.
    • exclude: Union[Set, Dict, None] - > Set / Woordenboekrelaties om uit te sluiten van opslaan, zelfs als de volgende = Waar en opslaan\ _ all = Waar worden gebruikt. Om geneste relaties uit te sluiten, geeft u geneste woordenboeken door, bijvoorbeeld: exclude={"child":{"sub_child": {"exclude_sub_child_realtion"}}} De toegestane waarden volgen de velden / exclude\ _ fields (from QuerySet) methodeschema, dus bij twijfel kunt u de documentatie in de query raadplegen - > Selecteer Word Set - > Velden De methode Model.update () accepteert nu de parameter\ _ columns: List\ [str] = None, die een lijst met kolomnamen accepteert die moeten worden bijgewerkt. Indien geslaagd, worden alleen die kolommen bijgewerkt in de database. Houd er rekening mee dat update () geen exemplaren van uw model vernieuwt, dus als u meer kolommen wijzigt dan u in de\ _ columns-lijst doorgeeft, heeft uw modelinstantie een andere waarde dan de database! De Model.model\ _ dump () -methode bevatte voorheen alleen direct gerelateerde modellen of geneste modellen (als ze niet-nullable en niet virtueel waren), nu zijn alle gerelateerde modellen die voorheen niet toegankelijk waren zonder lussen opgenomen in dict (). Dit mag niet breken omdat er meer gegevens in het woordenboek worden gedumpt, maar deze mogen niet verloren gaan.
  • QuerySet.delete(each=False, **kwargs) Voorheen werd u gevraagd een filter door te geven (via**Kwargs ofwel als een apart filter () aanroep) of het instellen van each = True accepteert nu ook exclusieve () aanroepen die NOT-filters genereren. Daarom moet u each = True instellen om de hele tabel of ten minste één filter / exclude-clausule te verwijderen.
  • Hetzelfde geldt voor QuerySet.update(each=False, **kwargs) voordat u ook een filter moet doorgeven (hetzij via**kwargs of als een afzonderlijke filter () aanroep) of het instellen van each = True accepteert nu ook de behalve (die een NOT-filter genereert). ) aanroepen. Daarom moet u elke = Waar instellen om de hele tabel of ten minste één filter / exclude-clausule bij te werken.
  • Hetzelfde geldt voor QuerysetProxy.update(each=False, **kwargs) U moet ook een filter doorgeven (via**Kwargs ofwel als een apart filter () aanroep) of het instellen van each = True accepteert nu ook behalve () aanroepen die NOT-filters genereren. Daarom moet u each = True instellen om de hele tabel of ten minste één filter / exclude-clausule bij te werken.

🐛 reparatie

  • Herstel onjuiste relationele veldresolutie in QuerysetProxy als de fk-kolom een andere database-alias heeft.
  • Een recursieve bug opgelost met zeer complexe modelstructuren met lussen bij het aanroepen van dict ().
  • Een bug verholpen wanneer twee niet-relationele velden werden samengevoegd (toegevoegd) in queryresultaten wanneer ze niet relationeel waren (d.w.z. JSON)
  • Een bug verholpen die dezelfde relationele naam in de keten gebruikte tijdens de vertaling van lijst naar woordenboek, maar resulteerde in verschillende modellen
  • Fix bulk\ _ create error bij het opslaan van property\ _ field decorator en pydantic fields
  • Fix slechte samenvoeging van diep geneste ketens met omgekeerde relaties

💬andere

  • prestatie optimalisatie
  • Splits tests in pakketten op basis van testgebieden

0.10.1

functie

  • voegt de methode get\ _ of\ _ none (**kwargs) toe aan QuerySet en QuerysetProxy. Het is precies hetzelfde als get (**kwargs), maar als er geen databaserecord is dat overeenkomt met de conditie, verhoogt get\ _ of\ _ none geen ormar. NoMatch-uitzondering en retourneert eenvoudig Geen.

reparatie

  • Er is een probleem opgelost waarbij dialectgerelateerde kolomnamen en verwijzingen naar tabelnamen in de order\ _ by-clausule niet goed werken in postgres.

0.10.0

breken

  • Ondersteuning verwijderd voor de lang verouderde velddefinitienotatie waarbij u het ormarveld gebruikt als een typehint, d.w.z. test_field: ormar.Integger() = None
  • verbeterde type hints - > mypy kan gerelateerde modelvelden (ForeignKey en ManyToMany) en het retourtype van de QuerySet-methode correct oplossen. De genoemde retourneren nu het juiste model (dwz Boek) in plaats van de ormar. Modeltype. De relatie en het omgekeerde van de QuerysetProxy-methode hebben nog steeds problemen, om de typehint te vergemakkelijken die nu Any retourneert. Gedeeltelijke correctie # 112.

functie

  • voegt methoden toe voor select_all(follow: bool = False) QuerySet en QuerysetProxy. Het is vergelijkbaar met de load\ _ all () -methode van het model, maar kan direct in queries worden gebruikt. Selecteer standaard\ _ all () voegt alleen direct gerelateerde modellen toe, en als follow = True ook gerelateerde modellen van gerelateerde modellen toevoegt zonder een lus in de relatie. Merk op dat dit niet het asynchrone model is en eindigt, dus u moet nog steeds get (), all (), etc uitgeven, omdat select\ _ all () een QuerySet (of proxy) zoals velden () of order\ _ by () retourneert.

interne structuur

  • Het veld Ormar wordt niet langer opgeslagen als een klasse in het woordenboek Meta.model\ _ fields, maar als een instantie.

0.9.9

functie

  • Voeg de mogelijkheid toe om de standaardvolgorde van relaties en modellen te wijzigen.
    • Om de modelvolgorde te wijzigen, geeft u orders\ _ door =\ [kolommen] waar kolommen: Lijst\ [str] naar het model metaclass
    • Om de volgorde van de relatie\ _ by te wijzigen, geeft u volgorde\ _ by =\ [columns] waar kolommen: Lijst\ [str]
    • Omgekeerde relatie volgorde wijzigen\ _ door pas gerelateerde\ _ orders\ _ door =\ [kolommen] waar kolommen: Lijst\ [str] De parameter* kan een kolomnaam zijn of -{col_name}gesorteerd in aflopende volgorde
    • In een relatie kunt u alleen sorteren op direct gerelateerde modelkolommen, of voor veel-op-veel kolommen kunt u ook sorteren op modelkolommen "{through_field_name}__{column_name}"
    • Order\ _ by-clausules worden in de volgende volgorde toegepast:
      • Geef de bestelling expliciet door\ _ door () in de query aan te roepen
      • Als er een relatie is door orders\ _ door
      • Model metaclasbestellingen\ _ door
      • Model primaire sleutelkolom ASC (fallback, gebruikt als geen van de bovenstaande gegevens wordt verstrekt)
  • Voeg vier nieuwe geaggregeerde functies toe - > min, max, sum en avg zijn hun corresponderende SQL-equivalenten.
    • U kunt een of meer kolomnamen doorgeven, inclusief gerelateerde kolommen.
    • Vanaf nu wordt elke doorgegeven kolom afzonderlijk geaggregeerd (dus som (col1 + col2) is niet mogelijk, u kunt som (col1, col2) gebruiken en vervolgens de som van de 2 in python toevoegen)
    • U kunt niet-numerieke kolommen niet optellen en gemiddelde
    • Als een kolom wordt geaggregeerd, wordt een enkele waarde direct als resultaat geretourneerd
    • Als u meerdere kolommen samenvoegt, retourneert u een woordenboek met de kolom: resultaatpaar
  • voegt 4 nieuwe signalen toe - > pre\ _ relatie\ _ toevoegen, post\ _ relatie\ _ toevoegen, pre\ _ relatie\ _ verwijderen en post\ _ relatie\ _ verwijderen Het nieuw toegevoegde signaal van wordt uitgezonden tegen het tegenovergestelde van de ManyToMany-relatie (beide partijen) en de foreignkey-relatie (hetzelfde als de openbare QuerysetProxy). Het -signaal ontvangt de volgende parameters: afzender: Type\ [Model] - Afzenderklasse, instantie: Model - Voeg instantie van gerelateerd model toe, kind: Model - Model wordt toegevoegd, relatie\ _ naam: str - Voeg relatie van kinderen toe De namen, zoals het add-signaal, worden ook doorgegeven via\ _ kwargs: Dictionary - het kwargs-woordenboek dat is doorgegeven om toe te voegen ()

veranderen

  • Nu, door het model van veel-op-veel relaties te instantiëren tijdens het maken, verwijderen en bijwerken, kunt u niet alleen automatisch verhogen als de primaire sleutel, maar ook elk kolomtype met standaardfunctionaliteit.
  • Aangezien het Through-model nu is geïnstantieerd, kunt u zich ook abonneren om signalen voor / na het Through-model op te slaan / bij te werken / te verwijderen De* pre\ _ update signaalontvanger krijgt nu ook de parameter Passed\ _ args, een woordenboek (indien aanwezig) met waarden die zijn doorgegeven aan de updatefunctie (anders een leeg woordenboek)

reparatie

  • Stuur nu het pre\ _ update-signaal voordat u de waarde ophaalt, zodat u de doorgegeven instantie kunt wijzigen en de gewijzigde veldwaarden worden weerspiegeld in de database
  • Bulk\ _ update kan nu ook correct het UUID primaire sleutelkolomtype

0.9.8

functie

  • Voeg de mogelijkheid toe om geselecteerde velden in de database te versleutelen
    • U moet minimaal coderen\ _ secret en coderen\ _ backend
    • encrypt\ _ backend kan een van ormar zijn. EncryptBackends-opsommingen (NONE, FERNET, HASH, CUSTOM) - Standaard: NONE
    • Wanneer u een aangepaste backend kiest, moet u een backend-klasse opgeven die subklassen ormar.fields. EncryptBackend
    • U kunt primaire\ _ sleutelkolommen en relationele reeksen (FK en M2M) niet versleutelen.
    • Biedt twee backends: HASH en FERNET
      • HASH is een eenrichtings-hash (zoals een wachtwoord) die nooit wordt gedecodeerd wanneer deze wordt opgehaald
      • FERNET is een bidirectionele codering / decodering backend
    • Houd er rekening mee dat u in de FERNET-backend de mogelijkheid om te filteren volledig verliest omdat een deel van de gecodeerde waarde tijdstempel is.
    • Merk op dat u in de HASH-backend kunt filteren op de volledige waarde, maar een filter zoals bevat werkt niet omdat de gecodeerde waarden worden vergeleken
    • Merk op dat het toevoegen van encrypt\ _ backend het databasekolomtype verandert in TEXT, wat moet worden weerspiegeld in db door migratie of handmatige wijzigingen

reparatie

  • (geavanceerd / intern) herstelt de gestopt werkende aangepaste sqlalchemy-type functie (via de typen. TypeDecorator subklasse), dus proces\ _ resultaat\ _ waarde

0.9.7

functie

  • Voeg de isnull-operator toe om methoden te filteren en uit te sluiten.

    1
    2
    album _ _ name _ _ isnull = Waar # (sql: album.name is null)
    album _ _ name _ _ isnull = Onwaar # (sql: album.name is niet null))
    
  • voegt ormar.or_- en ormar.and_-functies toe die kunnen worden gebruikt om complexe query 's te combineren met geneste omstandigheden. Voorbeeldquery:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    Boeken = (
        afwachten Book.objects.select _ gerelateerd ("auteur")
        . filter (
            Ormar. en _ (
                Ormar. of _ (jaar _ _ gt = 1960, jaar _ _ lt = 1940),
                auteur _ _ name = "J.R.R. Tolkien",
            )
        )
        . Alle ()
    )
    

    Controleer op bijgewerkte documenten in de query - > Filteren en sorteren - > Complexe filters

andere

  • Het instellen van een standaardwaarde op ForeignKey of ManyToMany verhoogt een ModelDefinition-uitzondering omdat deze niet wordt (en werd) ondersteund

0.9.6

# belangrijk

De* via veel-op-veel relationeel model wordt nu optioneel. Dit is geen grote verandering want als je het aanlevert werkt alles zoals voorheen. Dus als je geen ander veld op het model wilt of moet "doorgeven", kun je het overslaan. Houd er rekening mee dat het automatisch voor u wordt gemaakt en nog steeds moet worden opgenomen in het voorbeeld van de alembische migratie. Als u een bestaande database wilt verwijderen, controleert u de standaard naamgevingsconventie om de bestaande databasestructuur aan te passen.

1
Merk op dat als u de naam van het Through-model of de database- en tabelnaam wilt aanpassen, u deze nog steeds moet opgeven.

functie

  • voegt update-methoden toe aan QuerysetProxy, zodat gerelateerde modellen nu rechtstreeks kunnen worden bijgew**anuit het bovenliggende model in de ManyToMany-relatie en vanuit de omgekeerde relatie met buitenlandse sleutels. Merk op dat updates zoals in QuerySetupdate het aantal bijgewerkte modellen retourneren en gerelateerde modellen op het bovenliggende model niet bijwerken. Om de vernieuwde gegevens over het bovenliggende model te krijgen, moet u het gerelateerde model (d.w.z.await model_instance.related.all()) vernieuwen.
  • toevoegen load_all(follow=False, exclude=None) De modelmethode, waarmee de huidige instantie van het model en alle gerelateerde modellen in één aanroep kunnen worden geladen. Standaard laadt het alleen direct gerelateerde modellen, maar door de instelling follow = True wordt de boom doorlopen (lussen vermijden). U kunt ook dezelfde uitsluitingsparameters doorgeven als de methode QuerySet.exclude\ _ fields ().
  • De mogelijkheid toegevoegd om meer velden toe te voegen aan het Through-model van veel-op-veel relaties:
    • De naam van het doorlopende modelveld is de kleine naam van de klasse Through
    • U kunt extra velden doorgeven (op QuerysetProxy) bij het aanroepen van add (child,**kwargs) op een relatie
    • Als een van de zoekwoordargumenten een modelnaam met een waardewoordenboek zou moeten zijn, kunt u andere velden doorgeven aan de relationele (op QuerysetProxy) aanroep om te maken (**kwargs)
    • Bestellen kan via het modelveld.
    • U kunt filteren op modelveld
    • U kunt velden per model opnemen en uitsluiten
    • Voeg via modellen alleen toe aan gerelateerde modellen (d.w.z. als u van A naar B vraagt - > alleen op B)
    • Houd er rekening mee dat het pass-through-model expliciet wordt geladen zonder relaties - > relaties worden ingevuld in het veld ManyToMany.
    • Merk op dat net als voorheen je relationele velden niet kon declareren via het model, ze voor je worden ingevuld door ormar, maar als je dit nu probeert, zal het ModelDefinitionError
    • Bekijk de bijgewerkte ManyToMany-relatiedocumentatie voor meer informatie

andere

  • Bijgewerkte documentatie en API-documentatie
  • Refactoring en optimalisatie omvatten voornamelijk filters, uitsluitingen en sorteercriteria

0.9.5

reparatie

  • Los het probleem op van het maken van pydantic FieldInfo na het bijwerken van pydantic naar versie > = 1.8
  • De vereiste afhankelijkheidsversies opgelost om dergelijke situaties in de toekomst te voorkomen

0.9.4

reparatie

  • Vaste fastapi OpenAPI-schemageneratie voor automatische documentatie wanneer meerdere modellen naar hetzelfde gerelateerde model verwijzen

0.9.3

reparatie

  • Er is een probleem opgelost waarbij JSON-velden dubbel waren ontsnapt bij het instellen van waarden na initialisatie
  • Er is een probleem opgelost waarbij JSON-velden niet voldoen aan lege veldinstellingen vanwege de pydantische interne structuur
  • Selectievalidatie voor JSON-velden corrigeren
  • Opties repareren die niet werden gevalideerd bij het instellen van eigenschappen na initialisatie
  • Opties repareren die niet zijn gevalideerd tijdens QuerySet-updateaanroepen

0.9.2

andere

  • Snelstart bijgewerkt in het documentatie / readme bestand
  • Bijgewerkte documentatie met links naar query-subpagina 's
  • Badges toegevoegd voor codeklimaat en downloads

0.9.1

functie

  • Voeg de optiewaarde toe aan de OpenAPI-specificatie om het eruit te laten zien als een native Enum-veld in het resulterende schema.

reparatie

  • Als een speciaal veld niet is geïnitialiseerd, maar wordt doorgegeven als een tekenreeks, enz., Gebruik fastapi om het selectiegedrag te corrigeren.

0.9.0

belangrijk

  • -remfix: Release 0.8.0 introduceerde een bug die verhinderde dat beperkingen van vreemde\ _ sleutels in de database werden gegenereerd, hetzij in alembic, hetzij tijdens het maken via sqlalchemy.engine.
  • Daarom wordt het sterk aanbevolen om bij te werken als u versie > = 0.8.0 gebruikt, omdat hoewel de meeste ormar-functies actief zijn, databases die zijn gemaakt met ormar (of ormar + alembic) niet gerelateerd zijn en zullen lijden onder een prestatie- en gegevensintegriteitsperspectief.
  • Als u ormar gebruikt om verbinding te maken met een bestaande database, zouden uw prestaties en integriteit goed moeten zijn, maar u moet updaten om alle toekomstige schema-updates in het model weer te geven.

breken

  • Doorbraak: alle buitenlandse sleutels en unieke beperkingen hebben nu een naam, zodat alembic ze in de database kan herkennen zonder afhankelijk te zijn van de database
  • -corruptie: als het metaclass van het model tijdens de modelconstructie geen metadata of een database bevat, wordt ModelDefinitionError nu verhoogd in plaats van de generieke AttributeError.
  • Gebroken: de code / database die wordt gebruikt om query 's uit te voeren, heeft geen verbindingspool voor de SQLite-backend, wat betekent dat elke query wordt uitgevoerd met een nieuwe verbinding en dat geforceerde beperkingen voor buitenlandse sleutels niet kunnen worden ingeschakeld omdat ze standaard zijn uitgeschakeld bij elke verbinding. Dit is veranderd in ormar sinds > = 0.9.0, waar standaard elke sqlite3-query "PRAGMAabroad\ _ keys = 1;" heeft uitgevoerd, zodat elke sqlite3-verbinding nu standaard externe sleutelbeperkingen afdwingt, inclusief cascading.

andere

  • Werk de API-documentatie bij.
  • Voeg tests toe voor het maken van fk in de database en trapsgewijze verbindingen in de database

0.8.1

functie

  • beschrijft de afhandeling van ForwardRef in relaties. U kunt nu zelfverwijzende modellen maken - buitenlandse sleutels en veel-op-veel-relaties. ForwardRef kan worden gebruikt met to en throughModels.
  • Introduceer de mogelijkheid om twee identieke relationele join uit te voeren in een enkele query om complexe relaties aan te kunnen, zoals:

    1
    2
    3
    4
    5
    6
    7
        B = X = Y
      //
     Een
      \
        C = X = Y < = voordat u slechts één keer in één query van X naar Y kon linken
                     Tenzij er twee verschillende relaties werden gebruikt
                     (Twee relatievelden met verschillende namen)
    
  • Introduceert een paging-methode die limieten / offsets per pagina en paginagrootte mogelijk maakt. Beschikbaar voor QuerySet en QuerysetProxy.

andere

  • Refactoring en prestatie-optimalisatie in queries en join.
  • Voeg Python 3.9 toe aan de test- en Pypi-instellingen.
  • Update API-documentatie en -documentatie - >, wat een splitsing is van het querydocument.

0.8.0

breken

De ouder van het kind in de* Breaking: delete () omgekeerde relatie met een vreemde sleutel moet nu een relatienaam doorgeven omdat hetzelfde model meerdere keren kan worden geregistreerd en ormar moet weten uit welke relatie van de ouder u het kind wilt verwijderen. * Break: Gebruik standaard select\ _ lated pas limieten en offsets alleen toe op de hoofdtabel vóór de join - > wat betekent dat niet het totale aantal rijen beperkt is, maar alleen het aantal mastermodellen (de eerste in de query, gebruikt om het te construeren). U kunt nog steeds de limiet\ _ raw\ _ sql = True-vlag op de limiet of offset (of beide) gebruiken om alle rijen in het databaserespons te beperken * -corruptie: eerst uitzenden () krijgt nu de eerste rij gesorteerd op primaire sleutel asc (dus de eerste rij ingevoegd (kan verschillen voor niet-numerieke primaire sleutels - d.w.z. de alfabetische volgorde van tekenreeksen)) * -corruptie: als u get () zonder filters uitzendt, wordt nu de eerste rij opgehaald, gesorteerd op primaire sleuteldesc (dus het zou de laatste ingevoegde rij moeten zijn (kan verschillen voor niet-numerieke primaire sleutels - d.w.z. de alfabetische volgorde van tekenreeksen)) * Vernietiging (intern): De sqlalchemy-kolom die overblijft in Meta.columns is niet langer gebonden aan de tabel, dus u kunt de kolom daar niet rechtstreeks ophalen

functie

  • Overerving introduceren. Er zijn momenteel twee soorten overerving die mogelijk zijn:
    • Mixins - subklasse ormar niet. Model, definieer gewoon velden die later op verschillende modellen worden gebruikt (bijv. aangemaakte\ _ datum en bijgewerkte\ _ datum op elk submodel), alleen het daadwerkelijke model maakt de tabel, maar voeg die velden toe in mixins
    • concrete tabelovererving - betekent dat de ouder is gemarkeerd als abstract = waar in de Meta-klasse, en elk kind heeft zijn eigen tabel met kolommen van de ouder en zijn eigen onderliggende kolommen, enigszins vergelijkbaar met Mixins, maar de ouder is ook een (abstract) model
    • Bekijk voor meer informatie de documentatie in de sectie Model - > Overerving.
  • QuerySet first () kan gebruikt worden met prefetch\ _ lated

reparatie

  • Fix kleine bug in volgorde\ _ door van het hoofdmodel volgorde door
  • Herstel meerdere gerelateerde\ _ names prefetch\ _ query voor hetzelfde model.
  • corrigeert met dezelfde gerelateerde\ _ naam op verschillende modellen, waardoor dezelfde gerelateerde modellen elkaar overschrijven, waardoor nu ModelDefinitionError wordt verhoogd en u de naam moet wijzigen.
  • Er is een probleem opgelost waarbij de voorwaarde order\ _ by override bij het toepassen van meerdere join op dezelfde tabel.

Document

  • Documenten opsplitsen en opschonen:
    • Verdeel het model in kleinere delen
    • Verdeel het relatiegedeelte in subsecties
    • Verdeel het velddeel in kleine delen
  • Model overerving sectie toevoegen
  • API (bèta) documentatie toevoegen

0.7.5

  • Verkeerde relationele serienamen opgelost in veel\ _ tot\ _ veel verbindingen (fix # 73)

0.7.4

  • Staat meerdere relaties toe aan hetzelfde gerelateerde model / tabel.
  • Een serie foutniveaus opgelost die in veel\ _ naar\ _ veel verbindingen werd gebruikt (Fix # 73)
  • Een verkeerde relatiepopulatie voor M2M-relaties opgelost wanneer hetzelfde model ook een FK-relatie heeft.
  • Als er meerdere relaties in dezelfde tabel op een model staan, voegt u controles toe om te zien of de gebruiker een gerelateerde\ _ naam opgeeft.
  • Ruim gretiger dode zwakke proxymodellen op.

0.7.3

  • Er is een probleem opgelost met het ophalen van gerelateerde modellen met behulp van de UUDI pk-instelling, waarbij UUDI pk een onbewerkte string is (fix # 71)

0.7.2

  • fix voor het overschrijven van gerelateerde modellen met alleen pk Model.update() with fields passed as parameters(fix # 70)

0.7.1

  • Herstel overheersende gerelateerde modellen met pk alleen in Model.save () (fix # 68)

0.7.0

  • Break: QuerySetBulk\ _ update methode gooit nu ModelPersistenceError op doorgegeven niet-opgeslagen modellen in plaats van QueryDefinitionError
  • Doorbraak: modelinitialisatie met onbekende veldnamen verhoogt nu ModelError in plaats van KeyError
  • voegt signalen toe met vooraf gedefinieerde lijstsignalen en decorateurs: post\ _ delete, post\ _ save, post\ _ update, pre\ _ delete, pre\ _ save, pre\ _ update
  • Voeg py.typed toe en wijzig setup.py om mypy te ondersteunen
  • prestatie optimalisatie
  • Document bijwerken

0.6.2

  • prestatie optimalisatie
  • Een bug gerepareerd waarvoor het veld pydantic\ _ only nodig was
  • voegt eigenschap\ _ velddecorateur toe, registreert de functie als eigenschap, die zal worden opgenomen in Model.model\ _ dump () en fastapi reacties
  • Document bijwerken

0.6.1

  • Stel expliciet Geen in om nullable-velden uit te sluiten om te voorkomen dat pydantic standaardwaarden instelt (fix # 60).

0.6.0

  • Breaking: Het aanroepen van instance.load () bij het verwijderen van een instantierij uit de database verhoogt nu NoMatch in plaats van ValueError
  • Pauze: aanroepen van toevoegen en verwijderen op de ReverseForeignKey-relatie werkt nu de database-instellingen bij / verwijdert submodellen in de fk-kolom
  • doorbraak: ReverseForeignKey-relatie onthult nu QuerySetProxy API zoals ManyToMany-relatie
  • Gebroken: het opvragen van gerelateerde modellen van ManyToMany wist de lijst met gerelateerde modellen die op het bovenliggende model zijn geladen:
    • voorbeeld: post.categories.first () zal post.categorieën instellen op een lijst van 1 gerelateerde modellen - > het model dat als eerste is geretourneerd ()
    • Voorbeeld 2: Als een bericht 4 categorieën heeft, dan roept len (post.categorieën) = = 4 post.categories.limit(2).all() aan - > laadt nu slechts 2 kind processen assert len(post.categories) == 2
  • toegevoegd get\ _ of\ _ create, update\ _ of\ _ create, velden, uitsluiting van\ _ velden, uitsluiting, prefetch\ _ lated en order\ _ door naar QuerySetProxy, zodat u deze methoden nu rechtstreeks vanuit relaties kunt gebruiken
  • Document bijwerken

0.5.5

  • lost het probleem van alembische autogeneratie op voor het migreren van UUID-kolommen. Het zou alleen sqlalchemy CHAR (32) of CHAR (36) moeten genereren
  • Om dit te laten werken, moet u user\ _ module\ _ prefix = 'sa' instellen. (Moet gelijk zijn aan sqlalchemy\ _ module\ _ prefix optie (standaard is "sa".))

0.5.4

  • maakt het mogelijk om een uuid\ _ formaat ("hexadecimaal" (standaard) of "string") door te geven aan een UUID-veld om het opslagformaat te wijzigen. Standaard worden velden opgeslagen in hexadecimaal formaat (bijgesneden tot 32 tekens (zonder streepjes)), maar u kunt format = 'string' doorgeven om 36 (met streepjes) te gebruiken om bestaande databases of andere bibliotheken aan te passen.

    Voorbeeld:

    • Hexadecimale waarde = c616ab438cce49dbbf4380d109251dce
    • Tekenreekswaarde = c616ab43-8cce-49db-bf43-80d109251dce

0.5.3

  • Een bug in de Model.model\ _ dump () -methode verholpen die uitsluitingsparameters negeerde en geen woordenboekparameters bevatte.

0.5.2

  • Prefetch\ _ lated-methode toegevoegd om volgende modellen in afzonderlijke query 's te laden.
  • Document bijwerken

0.5.1

  • Schakel over naar github-acties in plaats van travis
  • De badge in het document bijwerken

0.5.0

  • Opslagstatus toegevoegd - > U kunt controleren of het model is opgeslagen met de eigenschap ModelInstant.save
    • Sla het model op na het opslaan / bijwerken / laden / bijwerken van de invoegmethode op het model
    • -model opgeslagen na create/get/first/all/get_or_create/update_or_create-methode
    • Modellen worden opgeslagen wanneer ze worden doorgegeven aan bulk\ _ update en bulk\ _ create
    • Sla het model op na het toevoegen / verwijderen van ManyToMany-gerelateerde objecten (automatisch opslaan / verwijderen via de modelinstantie)
    • Het model wordt niet opgeslagen na het wijzigen van een van zijn eigen velden (inclusief pk als Model.pk alias)
    • Model niet opgeslagen na het toevoegen / verwijderen van ForeignKey-gerelateerde objecten (fk-kolom niet opgeslagen)
    • gebruikt\ __init_\ _ slaat het model niet op na instantiatie (zonder QuerySet.create te gebruiken of voordat u save aanroept)
  • voegt Model.upsert (**kwargs), opslaan () als pk niet is ingesteld, anders bijwerken (**kwargs)
  • Extra Model.save_related(follow=False) herhaalt alle gerelateerde objecten in alle relaties en controleert of ze zijn opgeslagen. Zo niet, dan roept het upsert () op elk object.
  • Pauze: als u een niet-opgeslagen (pk is None) model toevoegt / verwijdert aan een veel-op-veel-relatie, werpt toevoegen een uitzondering op
  • Hiermee kunt u woordenboeken en verzamelingen doorgeven aan velden en behalve\ _ velden
  • Automatisch str en lijsten vertalen naar woordenboeken voor velden en behalve\ _ velden
  • Pauze: geneste modellen doorgeven aan velden en excre\ _ velden nu door de bijbehorende externe sleutelnaam in plaats van de naam van het doelmodel
  • Prestatie-optimalisatie - in modelproxy, newbasemodel - queryreductie >, sommige eigenschappen worden in de cache opgeslagen op het model
  • Ongebruikte relationele code opruimen
  • Voeg optionele prestatieafhankelijkheid orjson toe (sterk aanbevolen)
  • Document bijwerken

0.4.4

  • Add behalve\ _ fields () methode om velden uit SQL uit te sluiten
  • Naaminstellingen van de reactorkolom (aliassen)
  • Fix hoe kolommen met aliassen worden gesorteerd
  • Aanvullende tests voor velden en behalve\ _ velden
  • Document bijwerken

0.4.3

  • Bevat eigenschappen in models.model\ _ dump () en model.model\ _ dump\ _ json ()

0.4.2

  • Wijzig de creatie van pydantische modellen om de terugkeer mogelijk te maken van gerelateerde modellen die alleen met pk zijn gevuld

0.4.1

  • Voeg de order\ _ by-methode toe aan de queryset om sorteren mogelijk te maken
  • Document bijwerken

0.4.0

  • veranderde de notatie in de modeldefinitie - > gebruikt nu name = ormar. Veld () in plaats van name: ormar. Veld ()
    • Houd er rekening mee dat de oude notatie nog steeds wordt ondersteund, maar verouderd is en niet goed werkt met statische checkers zoals mypy en de pydantic pycharm-plug-in
  • Voer het promptdocument in en test het
  • Je kan mypy ook niet gebruiken voor testen je kan alleen het ormar pakket gebruiken
  • Repareer schaal- en precisieconversies met behulp van max\ _ cijfers en decimale\ _ plaatsen pydantische decimale velden
  • Documentatie bijwerken - Best Practices voor het toevoegen van afhankelijkheden
  • Refactor metaclassen en model\ _ velden om type hints beter te gebruiken
  • Voeg mypy- en pydantic-plug-ins toe aan de documentatie
  • Breid de documentatie over veel-op-veel relaties uit

0.3.11

  • Fix instelling server\ _ default als standaard veldwaarde in python

0.3.10

  • Fix postgresql-controle om uitzondering te voorkomen wanneer stuurprogramma 's niet zijn geïnstalleerd bij gebruik van verschillende backends

0.3.9

  • JSON-schemageneratie repareren vanaf # 19
  • Er is een probleem opgelost met een niet-geïnitialiseerde ManyToMany-relatie in de fastapi-kopie van ormar. Modellen
  • Update documentatie over FastAPI gebruik
  • Voeg tests toe om te controleren of fastapi / docs correct zijn gegenereerd

0.3.8

  • De mogelijkheid toegevoegd om alternatieve databasekolomnamen te voorzien van naamparameters voor alle velden.
  • Een bug gerepareerd die velden () gebruikte om relevante ManyToMany-velden te selecteren als ze leeg waren.
  • Document bijwerken

0.3.7

  • Documentatie publiceren en readme-bestanden bijwerken

0.3.6

  • Voeg de velden () methode toe om de geselecteerde kolommen in de database te beperken - alleen nullable kolommen kunnen worden uitgesloten.
  • UniqueColumns en een lijst met beperkingen worden toegevoegd aan het modelelement om unieke beperkingen op te bouwen in de lijst met kolommen.
  • Een UUID-veldtype toegevoegd op basis van het Char (32) kolomtype.

0.3.5

  • Bulk\ _ create en bulk\ _ update toegevoegd voor bewerkingen op meerdere objecten.

0.3.4

Add Query Set Level Methode

  • verwijderen
  • bijwerken
  • Verwerven of creëren
  • Bijwerken of aanmaken

0.3.3

  • Extra filters toevoegen - begin en einde

0.3.2

  • Optieparameters toevoegen aan alle velden - geaccepteerde waarden beperken tot de opgegeven waarden

0.3.1

  • Uitsluiting toegevoegd om te filteren waar niet.
  • Tests toegevoegd voor MySQL en Postgres en vaste Postgres.
  • Rafactoren en opruimen.

0.3.0

  • ManyToMany-velden toegevoegd en ondersteunt veel-op-veel relaties