#5. CRUD - основы ORM по работе с моделями | Django уроки
Vložit
- čas přidán 5. 09. 2024
- Практический курс по Django: stepik.org/a/1...
Django урок 5. Рассматриваются базовые операции добавления, чтения, изменения и удаления записей из таблицы БД с использованием ORM-интерфейса Django. Вы у знаете о методе save() и delete(). Менеджере записей objects и его методах: create(), all(), filter(), exclude(), get(). О сортировке записей методом order_by(). О просмотре выполненных SQL-запросов через коллекцию connection.queries. Атрибут pk.
Телеграм-канал: t.me/django_se...
Инфо-сайт: proproprogs.ru...
О запросах (ORM): djbook.ru/rel3...
Русскоязычная документация по Django 3: djbook.ru/rel3.0/
Официальный сайт по Django: www.djangoproj...
Даже когда лень учиться, включаю Ваши видео, сразу интерес появляется, спасибо за уроки!
есть такое)
+
+1
Я могу с уверенностью сказать что это лучшее обучающее видео по веб девелопменту в русскоязычном Ютубе. Объясняете всё очень хорошо очень понятно, использование указки-карандаша - очень сильный момент, к сожалению многие почему то не используют этот приём
А Яндекс практикум?
яндекс это бред
@@dzhegutin9876
О, эта фраза - «почему так произошло?», тянется через все курсы. Греет слух))
А мне больше нравится постоянная фраза " как видите, абсолютно ничего сложного " - она вселяет веру даже тогда, когда абсолютно ничего не понятно))
Приятно слушать, без спешки и без затягиваний, всё понятно, подача просто экстра-класс !
Спасибо за видео! Смотрю уроки по мере выхода. Небольшое дополнение про разницу в работе методов objects.filter() и objects.get() (21-23 мин). Возвращаемые ими объекты всё-таки отличаются в случае выбора одной записи из базы данных . Первый метод возвращает QuerySet (состоящий из одного экземпляра записи), а второй возвращает непосредственно экземпляр записи.
да, спасибо, об этом запамятовал сказать!
Добавлю,
Помимо pk__gte (больше или равно) и pk__lte (меньше или равно), есть еще и pk__gt (больше) и pk__lt (меньше)
спасибо за этот плейлист, дай бог здоровья автору, лучше уроков, наверно, в этой жизни не увижу никогда
Вы Бог программирования пришедший в этот мир, научить простых смертных
8:30 Небольшое замечание по "pk". В случае, если в модели явно задано поле, со свойством primary_key=true, то к нему можно будет обратиться по алиасу "pk". Если поля с заданным свойством нет, то Django автоматически задаёт это свойство полю "id". Поэтому pk не всегда означает id.
Лучшие уроки по Django!! Жду следующего видео!! +rep
Спасибо, всё круто объяснили. Я начинающий программист и только учусь, но это мне круто помогло
the special one, selfedu. Thank you so much
Спасибо за адекватную подачу информации
Лайк, комментарий... смотрю регулярно... пардон что иногда забываю ставить лайк)))
Благодарю за урок! Самое лучшее объяснение из всех что я слышал.
Отличое видео! Спасибо!
Это огонь! И сама ORM, и подача материала
Посмотрел Хирьянова. Очень понравилась подача. Решил обучиться, прочитать. Прочел книгу за авторством Матиза. Интересно, но стопорно после прочтения. Многие аспекты остаются без освещения.
Автор данного видео более подробно описывает ньансы, при этом понятным простым языком.
Спасибо!
Всё кратко, чётко и по делу. Очень сильно помогает ваши видео понимать как устроен Django=)
Спасибо вам ценю ваш труд уроки очень понятно присваивается
Огромное спасибо за то, как вы подаете материал. Вы лучший!
да все обясняете это важный момент в преподавание спасибо!
Как же радуется мой перфекционизм когда у тебя получаются ровные линии
Огромное спасибо за ваш труд!
O_O Подчёркивание сохраняет последнее действие.... Спасибо!
Слишком хорошее объяснение, спасибо!!!
Спасибо Вам за урок! На начальных стадиях, базовых возможностей я думаю хватит! Очень хороший урок!
Спасибо, потом сделаю еще, более расширенное рассмотрение ORM Django
@@selfedu_rus Вам спасибо!!!
Теперь фраза "студент склеил модель" звучит более интригующе.
У кого connection.queries возвращает пустой список, войдите в режим отладки(settings.DEBUG=True).
Дружище, если бы не ты я бы очень нервничал, спасибо тебе огромное!!! Твой коммент был в самом низу, рад что всё таки нашёл :)
Сергей, спасибо большое!
Зачетный урок!
Thanks so much for your deep explanation, keep it up buddy👍
Спасибо за урок!
Лучший как всегда,оставлю коммент для продвижения )) Надеюсь Джанго будет много ))
Балдеж, новый урок
Спасибо за урок! Как всегда, отлично!👌
чел, насколько ты хорош:)
Спасибо. Все очень доступно.
Спасибо, Сергей. Всё отлично!
Коммент в поддержку. Крайне понятно
thx! Так-то все легко и понятно, но запомнить это...)
спасибо - теперь все встало на свои места.
хорошо объясняете, не монотонно, многие объясняют монотонно и нечего не улавливается
Великолепно
Бомбический материал!
Божественно, спасибо!
Кльово!!)) Дякую!!)))😊
Получается в видео описан способ взаимодействие с базой данных через ORM, но ничего же нам не мешает взаимодействовать с базой данной напрямую, сформировать ее поля, а потом просто подключить к проекту. Просто в чем удобство описываемого метода, не для этого же Django придумали?
Связь через ORM хороша тем, что SQL-запросы оптимизируются под любой доступный тип СУБД, который можно подключить к Django, при этом в саму программу не потребуется вносить никаких изменений.
pumfnuci
pumfnuci
4 месяца назад
Очень доходчиво(коммент для продвижения))
Комментарии для поддержки канала 🖐️☺️
Прошëл короче первый жëсткий дедлайн одного известного платного онлайн курса, и вот только сейчас, смотря эти уроки я понимаю те вещи которые изначально так и не дошли до меня во время спринтов, и оказывается всё просто 😐
Уж не ЯП, ли?)
@@roman_tat кажется, что ЯП. Тоже прохожу их курсы. Они молодцы, конечно, спору нет. Но порой теория там преподносится так, будто я пришла учиться, уволившись из гугла ._.
А этот канал просто спасение для меня
16:28 - что если после строчки print(wi.title) мне не дают сделать еще один отступ, а сразу начинается запуск команды и выдается ошибка, что у меня нет отступа, хотя, какие клавиши не зажимал, консоль просто никогда дает сделать отступ
Зачетное видео
Уроки просто супер!!! Лучшая подача в Рунете!!! Вам огромное спасибо ещё раз!!! Подскажите в рамках этого курса или может отдельного не планируются уроки по DRF? Или например Django+React?
Спасибо, пока этого не планирую
@@selfedu_rus может хотя бы SQLAlchemy? В Рунете просто отсутсвует доступная информация на эту тему либо совсем примитивное объяснение и устаревшие практики! Всё равно спасибо огромное за тот материал что уже есть!!!!
@@user-ni4sq9td6l Будет занятие по основам ORM Django
Класс!
Спасибо за видео)
👏👍
почему у меня после кода с self ничего не поменялось в терминале?(вводил exit() и входил заново)
Что ты за тип такой? просто красучег!
Ребят, если у кого-то, как и у меня из консоли в pycharm не работала команда from, а консоли выдается ошибка: "from" не является внутренней или внешней
командой, исполняемой программой или пакетным файлом. То просто сначала пропишите python manage.py shell, а потом можете использовать from women.models import Women
Большое спасибо за урок, очень много инфы, что мозг лопается. Вопрос такой - как потом данные выводить на фронт? Слышал, что там какой-то API интерфейс для вывода информации на фронт, что мне кажется сложновато. Надеюсь тут в уроках об этом есть. Завтра смотрю шаблоны.
Во фронт в Django отдается обычный HTML-документ. Если же нужно передавать данные в унифицированном формате, например, JSON, то используется (часто) бибилотека DRF (о ней сейчас выкладываю занятия).
вместо sql studio на ubuntu использовал DBeaver
классная прога
Спасибо за уроки! А есть активная ссылка на сайт русскоязычной документации?
смотрю на это и думаю, ну зачем такие сложности, можно же просто писать sql запросы, не запоминая все эти gte filter и прочие. Зачем на основе и так легкого языка запросов создавать свой язык запросов, типа ну что за глупость. А потом вспомнила, что многие языки программирования написаны на основе других языков программирования. И я такая "А вот зачем"
Спасибо
Добрый день! Create он же по капотом вызывает метод save у объекта нашего класса, который объект наследует от Model. Метод get под капотом вызывает фильтр и делает проверку на количество записей. Верно?
круто
9:39 подскажите пожалуйста, по какой причине могло случиться так, что вместо sql запроса вывелось просто []
?
такая же проблема. Вы разобрались?
@@misha8280 нет, опустила это. А вы разобрались ?
@@user-cs2nu7ob7n я просто не устанавливал sqlite studio и не связывал sqlite studio с джанго. Думаю вся проблема в этом)
нам обязательно делать запросы к бд через терминал? внутри фрейма это возможно сделать? а то как то через терминал не слишком удобно выглядит...
нет, конечно, через терминал идет лишь демоснтрация ORM-команд
Сергей, а тоже ж самое можно сделать через админку, есть ли какие-то преимущества делать это в ручную, а не используя интерфейс в админке куда просто заносить сразу данные можно?
Можно, но на уровне приложения (программы) нужно прописывать эти команды. Например, для формирования выборки данных из БД для шаблонов.
@@selfedu_rus ну я имел ввиду, можно ж просто создать поля и в них добавлять разве нет?
@@nomadicus77 Не все же вы сами будете добавлять? ) Просто часто делают авторизацию на сайте и пользователи выкладывают свой контент. Здесь уже нужен булет ORM. Или, если у сайта появляется свой внешний API. Тут тоже ORM. И так далее.
здравствуйте! огромное спасибо за ваши труды! у меня вопрос - касаемо переменной "_" которая присвоила значения title и content... каким образом работает эта переменная, как она сохраняет значения?? пересмотрел несколько раз, но все равно не понял... был бы крайне признателен за объяснение! спасибо!
Спасибо! Это специальная внутренняя переменная в PYthon при работе в интерактивном режиме исполнения команд. Сама среда (интерпретатор Python) ее автоматически формирует и сохраняет последнее значение операции. К Django и ORM она никакого отношения не имеет :)
А как можно быстро данные закидать в БД. Только через Админ-панель?
Добрый день. Попросил у БД все записи. w1[0].title вернул title, w1[0].content не отреагировал, print(w1[0].content) вывел None.... w1[0].time_create вывел время... почему не получается дотянуться до контента?
Нашел беду. Не верно составлена база данных. Была ошибка в типах данных столбцов...
Работаю с "sqlite3". Данные через функцию "save()" не сохраняются. Возможно потому, что в "sqlite3" полем по умолчанию является "rowid"
Эти занятия тоже с SQLite записаны. Было все хорошо.
SQLiteStudio выберите вкладку "данные", там будет сохраненная инфа. У меня была открыта вкладка "структура", и я немог понять сработала команда "save()" или нет.
Я попыталась в БД добавить запись по созданной и импортированной модели и у меня вылезла ошибка...Traceback (most recent call last):
sqlite3.IntegrityError: NOT NULL constraint failed: posts_post.author_id
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: NOT NULL constraint failed: posts_post.author_id // не пойму ((
Может Вы пропустили обязательные поля? Т.е. на примере Сергея явно, что обязательные поля для новой записи модели Women - это title и content. Это просто догадка, возможно будет полезным, спасибо.
я правильно понимаю ,что переменные не сохраняются,когда я выхожу из программы? я могу обратиться списку того,что у меня хранится в бд,но не могу обращаться к переменным(w1,w2),которые создал на прошлой сессии. Есть команда,по которой может я могу посмотреть ,какие переменные у меня есть?
Я детали уже не помню, лучше этот конкретный вопрос задайте в телеграм-канал (ссылка под видео)
@@selfedu_rus а почему не помните, у вас нет коммерческого опыта с джанго?
@@alazarn7 мб, видео давно снимал и не помнит конкретно о чем там было
@@moren6164 да не сказал бы, он под другими видео тоже не мог на какие-то простые вопросы дать ответ
@@alazarn7 может и так, кто знает
Почему у меня в поле id, когда я создаю экземпляр класса, подстраивается не id, а первый аргумент экземпляра? Типо у меня в классе name, content, price, in_stock. В скобках у меня пишется не None, а значение переменной name. id появляется, только если при создании экземпляра класса перед name его прописать. Пример:
Product('name', 'content', 25000) будет ошибка, а если Product(1, 'name', 'content', 25000) то id = 1 и ошибки нет
id указан как Primary Key и Autoincrement, поэтому он автоматом формируется в БД
@@selfedu_rus да-да, уже всё работает. Не внимательность меня когда-то погубит) Я пол часа втыкал в никуда и только переделав проект заново я увидел ошибку)
Заметил, что метод order_by() сортирует сначала по заглавным буквам, а потом по прописным. Сначала я не понял почему Wika впереди dolina. Так же dYlona будет перед dolina
а как сделать чтоб сдвинулись id, после удаления первого елемента?
вроде на уровне SQL есть такая команда, но лучше этого не делать - очень ресурсоемко
Разве не переводится так..
CreateRetrieveUpdateDestroy?
connection.queries выдает [ ] - пустой список :( что не так?
здесь хранится история, либо ее нет, либо вы ее удалили )
@@selfedu_rus выполняю пошагово все как в уроке - выдает пустой список и все! понимаю, что на данный момент это не принципиально, но блин... хочу, чтоб и у меня выдавались запросы :)
все остальные моменты работают - таблица заполняется, обращение к полям записи происходит
из консоли выходил, заходил, импортировал... уж и не знаю где рыть. комментарии просмотрел - вроде ни у кого такого не было
@@alexprodan3650 та же самая проблема, ошибки нет, но connection.queries пустой
def __str__(self):
return self.title
появился вопрос
а как сделать так что бы при вызове Women.objects.all()
показывалось не только поле title а допустим title + content
return self.title + " " + self.content[:50]
@@selfedu_rus спасибо!
добрый день. Подскажите, а не проще вот это все создавать непосредственно в самой базе данных? зачем через консоль это все прописывать?
Для того, чтобы показать, как работает орм.
Каждая такая запись в консоли может быть записана во вьюшке - и таким образом, вьюшки будут производить операции с БД
А для просмотра последнего SQL-запроса разве connection.queries[-1] не работает?
вполне
Насыщенно
и почему там в скл запросах LIMIT 21? 18:42
в режиме отладки Django сам выставляет ограничение
Променял Энн Хэтэуей на Марго Робби(
Вот зачем управлять ими через shell это ведь муторно, через админку удобнее ведь?
разные бывают ситуации
Хе хе хе... Мы используем метод get() не потому что в Джанго такая конвенция. А потому, что метод filter() возвращает QuerySet - итератор. А у итератора нет атрибутов экземпляра. То есть, если к QuerySet применить атрибут - например заголовок Women.objects.filter(pk=2).title то запрос вернет ошибку TypeError - iterator has no attribute title.
В отличие от метода filter() метод get() возвращает экземпляр класса Women, а не список экземпляров, каковым является QuerySet. У экземпляра класса есть атрибуты, поэтому запись Women.objects.get(pk=2).title вернет заголовок записи с pk равным двум. А конвенции тут не причем.... так Питон устроен просто.
У меня почему-то connection.queries выводит пустой список
Подскажите пожалуйста,хочу добавить объект : t1=TaskWall.objects.create(cat=Category, title='Отправить 2 роту', text='Командующий майор Епифанцев, снаряжение ак 47, бронежилет, рация',time_perfomance='01.01.2010',user='admin',worker='admin'). Поле cat связано с таблицей Category, в которой 2 записи наряд и задача. Поля user и worker связаны с расширенной моделью CustomUser. Выдает ошибки : name 'Category' is not defined/Cannot assign "'Category'": "TaskWall.cat" must be a "Category" instance./unexpected indent . пробовал писать 'задача' тоже не работает .Вопрос как прописывать поля cat, user , worker.
Спасибо, всё сделал, разобрался
Орнул с Епифанцева))
Спасибо за урок!
👍👍👍
А как настроить, чтобы DateTimeField автоматически выставляли время не в UTC а в, допустим, UTC+11?
это в настройках самого феймоврка Django в файле settings.py там увидите нужнуб константу
Благодарю за урок!
Спасибо за занятие!
Подскажите делаю все как вы, но ранее было видно какие запросы выполнялись и они были сохранены в connection.queries , а теперь выдает пустой список
Спасибо за урок!
Спасибо большое за урок!