/ / Django - je metadáta modelu zdedená? - django, django modely

Django - zdedila sa metaúdaje modelu? - django, django modely

Mám hierarchiu tried v mojom models.py, Chcel by som, aby všetky skutočné tabuľky, ktoré definujem, boli rovnaké unique_together obmedzenia. Takže by som to rád vložil do Meta triedy základnej triedy, z ktorej všetci zdedia. Táto základná trieda musí samozrejme tiež špecifikovať abstract = True v jeho Meta trieda a nechcem, aby boli dedičské triedy abstraktné.

Musím určiť to isté unique_together obmedzenie niekoľkokrát, raz pre každú neabstraktnú triedu, ktorá zdedí z abstraktnej základne?

odpovede:

3 pre odpoveď č. 1

založené na dokumentácia

Keď vznikne abstraktná základná trieda, Djangorobí akúkoľvek vnútornú triedu Meta deklarovanú v základnej triede ako atribút. Ak trieda detí nevyhlasuje svoju vlastnú Meta triedu, zdedí Meta rodiča. Ak chce dieťa rozšíriť materskú triedu Meta, môže ju podtriedovať.

a tiež:

Django urobí jednu úpravu pre triedu Metaabstraktnej základnej triedy: pred inštaláciou atribútu Meta nastavuje abstrakt = False. To znamená, že deti abstraktných základných tried sa nestávajú automaticky samy abstraktnými triedami. Samozrejme, môžete vytvoriť abstraktnú základnú triedu, ktorá zdedí z inej abstraktnej základnej triedy. Stačí mať na pamäti explicitne nastaviť abstrakt = True vždy.