Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti.

Databázový vztah popisuje spojení mezi různými databázovými tabulkami. Vztahy určují způsob ukládání a načítání dat. Django dobře spolupracuje s relačními databázovými systémy (RDBMS). Podporuje tedy vztahy databázových tabulek.

Typy vztahů závisí na požadavcích vaší aplikace a datech, která modeluje. Dobré vztahy mezi modely Django a databází zlepšují údržbu dat. To zahrnuje zlepšení výkonu dotazů a snížení duplikace dat.

Prozkoumáním tří hlavních typů vztahů se můžete dozvědět, jak vztahy databáze Django ovlivňují výkon aplikace.

Databázové vztahy

Relační databázové systémy podporují tři typy databázových vztahů. Tyto vztahy jsou jeden k mnoha, mnoho k mnoha a jeden k jednomu. Typ databázového vztahu ovlivňuje případy použití vaší aplikace.

Modely Django představují databázové tabulky v aplikaci. Chcete-li vytvořit dobrý databázový systém, musíte vytvořit dobré vztahy mezi tabulkami. Databázové vztahy určují, jak ukládat a prezentovat data ve vaší aplikaci.

instagram viewer

Chcete-li pochopit databázové vztahy, začněte tím vytvoření projektu Django jmenoval Digestoře. Aplikace bude sousedská sociální síť. Bude řídit sociální aktivity, bezpečnost a obchody různých čtvrtí.

Rezidenti se mohou registrovat, přihlašovat a vytvářet profily. Mohou také vytvářet příspěvky a obchodní reklamy, které mohou vidět všichni.

Chcete-li začít, vytvořte databázi, která bude ukládat všechna data ze sousedství. Poté vytvoříte modely Profil, NeighborHood, Business a Post. Chcete-li vytvořit modely, musíte určit vztah, který databázové tabulky potřebují.

Vztah k databázi jedna ku jedné

Vztah jeden k jednomu znamená, že záznam v jednom modelu Django se vztahuje k jinému záznamu v jiném modelu. Tyto dva záznamy na sobě závisí. V tomto případě je Model profilu závisí na tom Uživatelský model k vytvoření rezidentních profilů.

Takže může existovat pouze jeden profil pro každého rezidenta registrovaného v aplikaci. Profil také nemůže existovat bez uživatele.

z django.db import modely
zdjango.přispívat.auth.modelyimportUživatel

třídaProfil(modely. Modelka):
uživatel = modely. OneToOneField (Uživatel, on_delete=models. CASCADE, related_name='profil')
jméno = modely. CharField (max_length=80, prázdné =Skutečný)
bio = modely. TextField (max_length=254, prázdné =Skutečný)
profile_picture = CloudinaryField('profilový obrázek', výchozí ='default.png')
umístění = modely. CharField (max_length=50, prázdné =Skutečný, nula=Skutečný)
email = modely. EmailField(nula=Skutečný)

def__str__(já):
vrátit se F'{profil .user.username}

Uživatelský model Django je vestavěný model ověřování v Django. Nemusíte pro to vytvářet model. Místo toho jej importujte z django.contrib.auth. The OneToOneField() na Model profilu definuje vztah jedna ku jedné.

The on_delete=modely. KASKÁDA argument brání smazání jednoho z těchto záznamů. Musíte odstranit záznamy z obou tabulek.

K vizualizaci vztahu ve vaší aplikaci můžete použít administrátorské rozhraní Django. Chcete-li se přihlásit do Django admin, musíte se zaregistrovat jako uživatel admin známý jako a superuživatel.

Vytvořte superuživatele spuštěním následujícího příkazu na terminálu:

krajtaspravovat.pyvytvářísuperuser

Zobrazí se výzva k zadání uživatelského jména, e-mailu a hesla. Jakmile to uděláte, spusťte server.

Otevřete stránku správce v prohlížeči pomocí adresy URL http://127.0.0.1:8000/admin.

Zobrazí se stránka správce, kde se můžete přihlásit pomocí přihlašovacích údajů, které jste vytvořili dříve. Jakmile se přihlásíte, uvidíte Skupiny a Uživatelé objektů. Ověřovací rámec Django spravuje tyto dva modely. Ve spodní části uvidíte Model profilu.

Otevři Profil model a pokračujte přidáním profilu. Uvidíte, že se objeví následovně:

Všimněte si, že máte možnost vytvořit profil pro uživatele. Datový typ OneToOneField() umožňuje vytvářet profily pro ověřené uživatele. Takto aplikace spravuje vztahy jeden ku jednomu.

One-to-Many vztahy

Vztah jeden k mnoha znamená, že jeden záznam v modelu je spojen s mnoha záznamy v jiném modelu. Označuje se také jako vztah mnoho ku jednomu.

Ve vašem případě může jeden správce vytvořit několik čtvrtí. Ale každá čtvrť může patřit pouze jednomu správci. K definování takového vztahu můžete použít datový typ ForeignKey.

Django má vestavěné administrátorské rozhraní. Nemusíte pro to vytvářet model. Správce má právo spravovat obsah a vizualizovat aplikaci z panelu správce.

Model, který pojme mnoho záznamů, bude mít Cizí klíč. Definuje vztah jako jeden k mnoha. Níže uvedený kód ukazuje, kam umístit klíč.

třídaSousedství(modely. Modelka):
admin = modelky. Cizí klíč("Profil", on_delete=models. CASCADE, related_name='kapuce')
jméno = modely. CharField (max_length=50)
umístění = modely. CharField (max_length=60)
hood_logo = CloudinaryField('logo_hood', výchozí ='default.png')
popis = modely. Textové pole()
health_tell = modely. IntegerField(nula=Skutečný, prázdné =Skutečný)
policejní_číslo = modely. IntegerField(nula=Skutečný, prázdné =Skutečný)
Počet = modely. IntegerField(nula=Skutečný, prázdné =Skutečný)

def__str__(já):
vrátit se F'{.name} kapuce'

Vztah v aplikaci můžete vidět, jak je znázorněno na obrázku:

The Sousedství model má nyní správce. Aby mohl kdokoli vytvořit sousedství, musí mít práva správce. A jedna čtvrť nemůže mít mnoho správců.

Databázové vztahy Many-to-Many

Ve vztazích mnoho k mnoha se mnoho záznamů v jednom modelu spojuje s jinými v jiném. Například, Pošta a podnikání modely mohou mít několik záznamů o sobě. Uživatelé mohou ve svých příspěvcích vytvořit několik obchodních inzerátů a naopak.

Vytváření vztahů many-to-many však může vést k nepřesným datům. V jiných rámcích byste museli vytvořit novou tabulku, abyste tyto dvě tabulky spojili.

Django na to má řešení. Když použijete pole many-to-many, vytvoří novou tabulku mapující dvě tabulky dohromady. Pole many-to-many můžete vložit do kteréhokoli ze dvou modelů, ale nemělo by to být v obou modelech.

třídaPošta(modely. Modelka):
titul = modely. CharField (max_length=120, nula=Skutečný)
příspěvek = modely. Textové pole()
datum = modely. DateTimeField (auto_now_add=Skutečný)
uživatel = modely. ForeignKey (Profil, on_delete=models. CASCADE, related_name='post_owner')
kapuce = modely. ForeignKey (NeighbourHood, on_delete=models. CASCADE, related_name='hood_post')
podnikání = modely. ManyToManyField (Business)

def__str__(já):
vrátit se F'{.title} příspěvek'

Nyní, když se podíváte na Pošta model na panelu administrátora, můžete k jednomu příspěvku připojit několik firem.

Django zjednodušuje databázové vztahy

Typ databáze, kterou pro svou aplikaci používáte, určuje způsob využití dat. Django má komplexní systém, který usnadňuje připojení a provoz relačních databází.

Funkce Django usnadňují ukládání a načítání dat ze souvisejících tabulek. Má vestavěná rozhraní API, která se připojují a vytvářejí databázové vztahy pro vaši aplikaci.

Databázové vztahy určují chování vaší aplikace. Zda použijete vztahy one-to-one, one-to-many nebo many-to-many, záleží na vás.

S Django můžete konfigurovat a testovat funkce, aniž byste narušili vaši aplikaci. Použijte Django k zabezpečení databázových systémů a optimalizujte své vývojářské zkušenosti.