Правильное понимание отношений между таблицами – это ключ к созданию надежной модели данных
Отношения базы данных описывают связь между различными таблицами базы данных. Отношения определяют, как хранить и извлекать данные.Django хорошо работает с реляционными системами баз данных (RDBMS). Поэтому он поддерживает отношения между таблицами базы данных
Типы отношений зависят от требований вашего приложения и данных, которые оно моделирует. Хорошие отношения между моделями Django и базой данных улучшают обслуживание данных. Это включает в себя повышение производительности запросов и уменьшение дублирования данных
Вы можете узнать, как отношения базы данных Django влияют на производительность приложения, изучив три основных типа отношений
Взаимоотношения баз данных
Реляционные системы баз данных поддерживают три типа отношений между базами данных. Это отношения ‘один ко многим’, ‘многие ко многим’ и ‘один к одному’. Тип отношения базы данных влияет на сценарии использования вашего приложения
Модели Django представляют таблицы базы данных в приложении. Вы должны создать хорошие отношения между таблицами, чтобы создать хорошую систему баз данных. Отношения базы данных определяют, как хранить и представлять данные в вашем приложении
Чтобы понять отношения с базой данных, начните с создания проекта Django под названием Hoods. Приложение будет представлять собой социальную сеть района. Оно будет управлять социальной активностью, безопасностью и бизнесом различных районов
Жители могут зарегистрироваться, войти в систему и создать профили. Они также могут создавать сообщения и объявления о бизнесе, которые будут видны всем
Чтобы начать работу, создайте базу данных, в которой будут храниться все данные о соседях. Затем вы создадите модели Profile, NeighborHood, Business и Post. Чтобы создать модели, вы должны определить, какие отношения необходимы таблицам базы данных
Отношения базы данных ‘один к одному’
Отношения один-к-одному подразумевают, что запись в одной модели Django связана с другой записью в другой модели. Эти две записи зависят друг от друга. В этом случае модель Profile зависит от модели User для создания профилей резидентов
Таким образом, для каждого жителя, зарегистрированного в приложении, может существовать только один профиль. Кроме того, без пользователя профиль не может существовать
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'
Модель User в Django – это встроенная модель аутентификации в Django. Вам не нужно создавать для нее модель. Вместо этого импортируйте ее из django.contrib.auth. Поле OneToOneField() в модели Profile определяет отношение ‘один к одному’
Аргумент on_delete=models.CASCADE предотвращает удаление одной из этих записей. Вы должны удалить записи из обеих таблиц
Вы можете использовать интерфейс администратора Django для визуализации отношений в вашем приложении. Чтобы войти в Django admin, вы должны зарегистрироваться как пользователь-администратор, известный как суперпользователь
Создайте суперпользователя, выполнив следующую команду в терминале:
python manage.py createsuperuser
Появится запрос на ввод имени пользователя, электронной почты и пароля. Как только вы это сделаете, запустите сервер
Откройте страницу администратора в браузере, используя URL http://127. 0. 0. 1:8000/admin
Вы увидите страницу администратора, где вы можете войти в систему, используя учетные данные, созданные ранее. Войдя в систему, вы увидите объекты Groups и Users. Фреймворк аутентификации Django управляет этими двумя моделями. В самом низу вы увидите модель Profile
Откройте модель Profile и перейдите к добавлению профиля. Вы увидите, что он выглядит следующим образом:
Обратите внимание, что у вас есть возможность создать профиль для пользователя. Тип данных OneToOneField() позволяет создавать профили для аутентифицированных пользователей. Таким образом приложение администрирует отношения ‘один к одному’
Отношения ‘один ко многим’
Отношения ‘один ко многим’ подразумевают, что одна запись в модели связана со многими записями в другой модели. Его также называют отношением ‘многие к одному’
В вашем случае один администратор может создать несколько районов. Но каждый район может принадлежать только одному администратору. Для определения такого отношения можно использовать тип данных ForeignKey
Django имеет встроенный интерфейс администратора. Вам не нужно создавать для него модель. Администратор имеет право управлять содержимым и визуализировать приложение из панели администратора
Модель, вмещающая много записей, будет иметь ForeignKey. Он определяет связь как ‘один-ко-многим’. В приведенном ниже коде показано, где нужно разместить ключ
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'
Вы можете увидеть отношения в приложении, как показано на рисунке:
Модель NeighborHood теперь имеет администратора. Чтобы любой человек мог создать район, он должен иметь права администратора. И у одного района не может быть много администраторов
Отношения базы данных ‘многие ко многим’
В отношениях ‘многие-ко-многим’ многие записи в одной модели связываются с другими в другой. Например, модели Post и Business могут иметь несколько записей друг о друге. Пользователи могут делать несколько бизнес-реклам в своих сообщениях и наоборот
Однако создание отношений ‘многие-ко-многим’ может привести к неточным данным. В других рамках вам придется создать новую таблицу для объединения двух таблиц
В Django есть решение для этого. Когда вы используете поле ‘многие ко многим’, он создает новую таблицу, соединяющую две таблицы вместе. Вы можете поместить поле many-to-many в любую из двух моделей, но оно не должно быть в обеих моделях
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'
Теперь, когда вы просматриваете модель Post на панели администратора, вы можете прикрепить несколько бизнесов к одному посту
Django упрощает отношения с базами данных
Тип базы данных, которую вы используете для своего приложения, определяет, как использовать данные.Django имеет комплексную систему, которая упрощает подключение и работу с реляционными базами данных
Функции Django позволяют легко хранить и извлекать данные из связанных таблиц. Он имеет встроенные API, которые позволяют подключаться и создавать отношения с базой данных для вашего приложения
Отношения базы данных определяют поведение вашего приложения. Используете ли вы отношения один-к-одному, один-ко-многим или многие-ко-многим, зависит от вас
С Django вы можете настраивать и тестировать функции, не ломая ваше приложение. Используйте Django для защиты систем баз данных и оптимизации работы разработчиков
Комментировать