62 Связь "Один к одному". Django OneToOneField. Курс по Django

🚀 Add to Chrome – It’s Free - YouTube Summarizer

Category: N/A

Building WordCloud ...

Summary

No summary available.

Transcript

00:00

итак нам с вами осталось рассмотреть один тип связи он называется один к одному и как вы видите по рисунку он позволяет взять две таблички и связать две записи из этих двух таблиц причем он не дает делать дополнительные связи то есть мы конкретно и записи с левой

00:15

таблички связываем с одной конкретной записью из правой таблички и никаких связей больше сделать мы не можем то же самое касается правой то есть мы берём записи с правой таблички связываем только с одной записи с левой таблички и давайте я вам покажу как эту связь организовать в жанр для этого нам

00:32

понадобится ещё одна дополнительная табличка пусть она будет хранить в себе информацию о гримерках соответственно за вас она будет dressing room мы наследуем ся от модус . модов и какую информацию мы можем хранить и а гримерках это например на каком она

00:47

находится этаже в здании это будет у нас целое число и также давайте номер кабинета также давайте возьмем метод стр переопределим пусть у нас будет просто возвращаться

01:03

строка состоящая из номера этажа и через пробел номер кабинета и гримерке у нас будут привязываться к нашим актером и так как мы разбираем связь один к одному значит в одной

01:18

гримерке может быть только один актер и одного актера может быть только одна гримерка и так значит здесь в актере давайте создадим поле dressing и пишем следующим образом ума dolls есть специальный тип поля он называется want one field первым параметром мы говорим с

01:35

какой табличками связываем это dressing room дальше параметр он дарит он обязательный здесь мы давайте поставим следующие значения это будет модель с . set null что делает этот параметр мы с вами

01:52

рассматривали ранее я здесь не буду повторяться и здесь есть также параметр villeret name но его мы с вами при определять не будем почему потому что для связи один к одному django создает название поля полностью совпадающие с

02:08

названием вашей модели то есть в а dressing room будет создана дополнительное поле эктор они vector set как случае свете например один ко многим вот в этом мы с вами скоро увидимся и так как мы с вами поставили он делит равный согнул то мы должны разрешить в

02:26

базе данных сохранять значение null поэтому ставим на утру ну и давайте его щас сделаем необязательным это поле поэтому говорим blink true вот в принципе все связь мы организовали давайте сделаем миграции

02:44

отлично и осталось их применить и давайте перейдем в админку и выведем там наши гримерке переходим в админку обновляем страничку

03:03

вот гримерке нас появились давайте создадим парочку и так этаж у нас будет 1 допустим кабинет равной сотни но еще давайте любой создадим неважно то какие значения будут нас

03:18

лежать и теперь переходим к актерам смотрите джима керри назначаем гримерку под номером 11 сохраняем и теперь переходим кристина был пытаемся назначить ему тоже самую

03:34

гримерку и получаем с вами ошибку мне говорится что актер с такой гримерка ну в нашем случае класс tracing уже существует вот и поэтому автоматически django нам не дает сохранить такую же самую гримерку вот если мы выставляем

03:50

свободную гримерку то никаких ошибок не возникает теперь давайте перейдём в консоль и посмотрим каким полям мы имеем доступ для этого мы запускаем с вами shell plus давайте обращаться гример там

04:06

делаем мы это таким образом вот возьмем например первую гримерку под индексом ноль и положим ее в переменную д смотрите у нас все гримерки заняты и значит я могу обращаться к полю эктор

04:21

вот я уже ранее говорил что django создает связанное поле модели dressing room и связь у нас происходит следующим образом вот наше поле связи актеры с гример кай и так как мы создаем его в классе эктор то название берется

04:39

от этой модель и значит dressing room будет создана поле с названием эктор и вот значит я обращаюсь через это поле и получая актера джима керри и дальше через . я могу получить его допустим first name и так далее то есть доступ ко

04:54

всем его атрибутом вот теперь давайте обратимся к нашим актером и возьмем тома круза положим его в переменный ток и попробуем ему назначить

05:12

новую гримерку а точнее ту гримерку которая уже занята другим актерам она хранится переменной д вот сейчас никаких ошибок нету но если мы попробуем сохранить то мы получим с вами ошибку вот типы и я не constrain и говорится

05:28

что и она возникает потому что django проверяет на уникальность гримерок и у нас сейчас получается ситуация что у двух актеров проставлена одинаковая гримерка соответственно такой ситуации у нас быть не должно вот и что касается поле эктор который возникает у нас

05:45

dressing room его также можно вывести в админку давайте с вами это и сделаем для этого давайте я скопирую вот этот класс из него мы удалим практически все кроме лишь дисплей и

06:01

будем создавать но в админку для класса dressing room значит здесь мы убираем movie здесь мы тоже давайте вместо море напишем dressing room и мы знаем что у dressing room есть floor in омбр

06:16

остальные поля нам не нужны ну и заодно давайте выведем поле эктор и не забудьте закомментировать строчку под номером 10 потому что мы здесь создаем новый админку для этой модели обновляем страничку идем в гримерке и вот здесь

06:35

видим заодно информацию с каким актером закреплена это гримерка и соответственно эта информация будет обновляться если вы измените связи на этом мы с вами заканчиваем изучать этот модуль посвященный типом связей и в качестве домашнего задания поразмыслите на

06:51

следующей задачей вот мы хотим с вами сделать блок то есть сайт где авторы будут размещать свои статьи подумайте какие модели нам необходимо реализовать из каких полейте модели должны состоять и какой тип связей будет между этими моделями ну вот это будет ваше домашнее

07:08

задание но на сегодня у меня все и увидимся с вами в следующем модуле всем пока