Pochopte databázové vzťahy v Django

Pochopte databázové vzťahy v Django
Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu.

Databázový vzťah popisuje spojenie medzi rôznymi databázovými tabuľkami. Vzťahy určujú spôsob ukladania a získavania údajov. Django funguje dobre s relačnými databázovými systémami (RDBMS). Preto podporuje vzťahy databázových tabuliek.





Typy vzťahov závisia od požiadaviek vašej aplikácie a údajov, ktoré modeluje. Dobré vzťahy medzi modelmi Django a databázou zlepšujú údržbu údajov. To zahŕňa zlepšenie výkonu dotazov a zníženie duplicity údajov.





VYUŽITIE VIDEA DŇA

Môžete sa naučiť, ako vzťahy databázy Django ovplyvňujú výkon aplikácie, preskúmaním troch hlavných typov vzťahov.





Databázové vzťahy

Relačné databázové systémy podporujú tri typy databázových vzťahov. Tieto vzťahy sú jeden k mnohým, mnoho k mnohým a jeden k jednému. Typ databázového vzťahu ovplyvňuje prípady použitia vašej aplikácie.

Modely Django reprezentujú databázové tabuľky v aplikácii. Aby ste vytvorili dobrý databázový systém, musíte vytvoriť dobré vzťahy medzi tabuľkami. Databázové vzťahy určujú, ako ukladať a prezentovať údaje vo vašej aplikácii.



Aby ste pochopili databázové vzťahy, začnite tým vytvorenie projektu Django pomenovaný kapucne. Aplikácia bude susedskou sociálnou sieťou. Bude riadiť sociálne aktivity rôznych štvrtí, bezpečnosť a podnikanie.

Obyvatelia sa môžu registrovať, prihlasovať a vytvárať si profily. Môžu tiež vytvárať príspevky a obchodné inzeráty, ktoré môžu vidieť všetci.





Ak chcete začať, vytvorte databázu, ktorá bude uchovávať všetky údaje zo susedstva. Potom vytvoríte modely Profil, NeighborHood, Business a Post. Ak chcete vytvoriť modely, musíte určiť vzťah, ktorý databázové tabuľky potrebujú.

Databázový vzťah typu one-to-one

Vzťah jeden k jednému znamená, že záznam v jednom modeli Django súvisí s iným záznamom v inom modeli. Tieto dva záznamy na sebe závisia. V tomto prípade, Model profilu závisí od Užívateľský model na vytvorenie rezidentských profilov.





Takže pre každého rezidenta zaregistrovaného v aplikácii môže byť len jeden profil. Profil tiež nemôže existovať bez používateľa.

from django.db import models 
from django.contrib.auth.models import User

class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
name = models.CharField(max_length=80, blank=True)
bio = models.TextField(max_length=254, blank=True)
profile_picture = CloudinaryField('profile_picture', default='default.png')
location = models.CharField(max_length=50, blank=True, null=True)
email = models.EmailField(null=True)

def __str__(self):
return f'{self.user.username} profile'

Používateľský model Django je vstavaný model autentifikácie v Django. Nemusíte na to vytvárať model. Namiesto toho ho importujte z django.contrib.auth. The OneToOneField() na Model profilu definuje vzťah jeden k jednému.

The on_delete=models.CASCADE argument zabraňuje vymazaniu jedného z týchto záznamov. Musíte odstrániť záznamy z oboch tabuliek.

Na vizualizáciu vzťahu vo svojej aplikácii môžete použiť rozhranie správcu Django. Ak sa chcete prihlásiť do Django admin, musíte sa zaregistrovať ako používateľ admin známy ako a superužívateľ .

Vytvorte superužívateľa spustením nasledujúceho príkazu na termináli:

python manage.py createsuperuser

Zobrazí sa výzva na zadanie používateľského mena, e-mailu a hesla. Keď to urobíte, spustite server.

Otvorte stránku správcu v prehliadači pomocou adresy URL http://127.0.0.1:8000/admin.

Uvidíte stránku správcu, kde sa môžete prihlásiť pomocou poverení, ktoré ste vytvorili predtým. Po prihlásení sa vám zobrazí skupiny a Používatelia predmety. Autentifikačný rámec Django spravuje tieto dva modely. V spodnej časti uvidíte Model profilu.

Otvor Profil model a pokračujte v pridávaní profilu. Uvidíte, že sa zobrazí nasledovne:

  Django admin zobrazuje vzťah medzi modelmi profilu a používateľov

Všimnite si, že máte možnosť vytvoriť profil pre používateľa. Dátový typ OneToOneField() vám umožňuje vytvárať profily pre overených používateľov. Aplikácia takto spravuje vzťahy typu one-to-one.

ako nájsť grafickú kartu windows 10

Vzťahy jeden k mnohým

A vzťah one-to-many znamená, že jeden záznam v modeli sa spája s mnohými záznamami v inom modeli. Označuje sa tiež ako vzťah typu many-to-one.

Vo vašom prípade môže jeden správca vytvoriť niekoľko štvrtí. Každá štvrť však môže patriť iba jednému správcovi. Na definovanie takéhoto vzťahu môžete použiť typ údajov ForeignKey.

Django má vstavané administrátorské rozhranie. Nemusíte na to vytvárať model. Správca má právo spravovať obsah a vizualizovať aplikáciu z panela správcu.

Model, ktorý pojme veľa záznamov, bude mať Cudzí kľúč . Definuje vzťah ako jeden k mnohým. Nižšie uvedený kód ukazuje, kam umiestniť kľúč.

class NeighbourHood(models.Model): 
admin = models.ForeignKey("Profile", on_delete=models.CASCADE, related_name='hood')
name = models.CharField(max_length=50)
location = models.CharField(max_length=60)
hood_logo = CloudinaryField('hood_logo', default='default.png')
description = models.TextField()
health_tell = models.IntegerField(null=True, blank=True)
police_number = models.IntegerField(null=True, blank=True)
Count= models.IntegerField(null=True, blank=True)

def __str__(self):
return f'{self.name} hood'

Vzťah v aplikácii môžete vidieť, ako je znázornené na obrázku:

  Model susedstva zobrazuje pridanie voľby správcu

The NeighborHood model má teraz admina. Aby mohol ktokoľvek vytvoriť susedstvo, musí mať práva správcu. A jedna štvrť nemôže mať veľa správcov.

Databázové vzťahy typu Many-to-Many

In many-to-many vzťahy, mnohé záznamy v jednom modeli sa spájajú s inými v inom. Napríklad, Príspevok a Podnikanie modely môžu mať niekoľko záznamov o sebe. Používatelia môžu vo svojich príspevkoch vytvoriť niekoľko obchodných inzerátov a naopak.

Vytváranie vzťahov typu many-to-many však môže viesť k nepresným údajom. V iných rámcoch by ste museli vytvoriť novú tabuľku na spojenie dvoch tabuliek.

Django má na to riešenie. Keď použijete pole many-to-many, vytvorí sa nová tabuľka mapujúca dve tabuľky dohromady . Pole many-to-many môžete vložiť do ktoréhokoľvek z dvoch modelov, ale nemalo by to byť v oboch modeloch.

class Post(models.Model): 
title = models.CharField(max_length=120, null=True)
post = models.TextField()
date = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name='post_owner')
hood = models.ForeignKey(NeighbourHood, on_delete=models.CASCADE, related_name='hood_post')
business = models.ManyToManyField(Business)

def __str__(self):
return f'{self.title} post'

Teraz, keď si pozriete Príspevok model na paneli správcu, môžete k jednému príspevku pripojiť niekoľko firiem.

  Post model má možnosť pridať niekoľko firiem

Django zjednodušuje databázové vzťahy

Typ databázy, ktorú používate pre svoju aplikáciu, určuje spôsob využitia údajov. Django má komplexný systém, ktorý uľahčuje pripojenie a prevádzku relačných databáz.

Funkcie Django uľahčujú ukladanie a získavanie údajov zo súvisiacich tabuliek. Má vstavané rozhrania API, ktoré sa pripájajú a vytvárajú databázové vzťahy pre vašu aplikáciu.

Vzťahy databázy určujú správanie vašej aplikácie. Či použijete vzťahy typu one-to-one, one-to-many, alebo many-to-many, závisí od vás.

S Django môžete konfigurovať a testovať funkcie bez prerušenia vašej aplikácie. Použite Django na zabezpečenie databázových systémov a optimalizujte svoje vývojárske skúsenosti.