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ď č. 1založ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.