Django shell – це інтерактивна оболонка Python, яку надає Django. Вона дозволяє напряму взаємодіяти з вашим проєктом, моделями і базою даних в реальному часі. Це, по суті, Python-консоль, але з підключеним контекстом вашого Django проєкту. Через Django shell ви можете:
- Створювати записи в базі даних.
- Оновлювати існуючі записи.
- Видаляти дані.
- Виконувати запити до вашої бази даних і перевіряти їх результат.
- Експериментувати з логікою ваших моделей.
Django shell – це чудовий інструмент для налагодження і швидкої перевірки ідей.
Запуск Django shell
Щоб відкрити Django shell, виконайте наступну команду в терміналі, знаходячись у папці з вашим проєктом:
python manage.py shell
Якщо все гаразд, ви побачите щось таке:
Python 3.X.X (default, ...)
Django X.X.X
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>>
Вітаю! Ви в Django shell. Зараз ми почнемо маніпуляції з нашими моделями.
Робота з базою даних через Django shell
Підключення моделей
Перше, що потрібно зробити, це імпортувати ваші моделі. Припустимо, ми розробляємо застосунок blog, у якому є модель Post. Модель Post виглядає так:
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=255)
content = models.TextField()
published_date = models.DateTimeField(auto_now_add=True)
Імпортуємо цю модель у Django shell:
from blog.models import Post
Тепер ви можете працювати з моделлю Post, ніби це ваш новий найкращий друг.
Створення записів
Створювати записи в базі даних через Django shell дуже просто. Давайте додамо перший запис у таблицю Post.
# Створюємо новий екземпляр моделі
post = Post(title="Мій перший пост", content="Ласкаво просимо в мій блог!")
# Зберігаємо екземпляр у базі даних
post.save()
Після виконання post.save() ваш запис збережено в базі даних.
Але є спосіб ще коротший:
Post.objects.create(title="Другий пост", content="Все стає простіше!")
Команда create() одразу робить ініціалізацію об'єкта та збереження.
Читання даних
Тепер, коли у нас є дані, давайте їх прочитаємо. Для цього використовуємо методи QuerySet:
# Отримати всі записи
posts = Post.objects.all()
print(posts)
Ви побачите щось на кшталт:
<QuerySet [<Post: Post object (1)>, <Post: Post object (2)>]>
Звісно, це не зовсім читабельно. Додамо в модель Post метод __str__, який покращить відображення об'єктів.
# blog/models.py
class Post(models.Model):
...
def __str__(self):
return self.title
Тепер у Django shell:
>>> posts = Post.objects.all()
>>> print(posts)
<QuerySet [<Post: Мій перший пост>, <Post: Другий пост>]>
Краса, правда?
Фільтрація даних
Ви можете використовувати фільтри для пошуку даних:
# Знайти записи з певною назвою
post = Post.objects.get(title="Мій перший пост")
print(post.content)
Але будьте обережні з get. Якщо він не знаходить запис або знаходить більше одного, він викликає виняток. Щоб уникнути цього, краще використовувати filter:
# Знайти записи, що містять слово "пост"
posts = Post.objects.filter(title__contains="пост")
print(posts)
Фільтрація підтримує безліч спеціальних операторів, таких як contains, startswith, exact та багато інших. Повний список доступний у документації Django ORM.
Оновлення даних
Щоб оновити запис, спочатку знайдемо його, а потім змінимо потрібні поля:
post = Post.objects.get(title="Мій перший пост")
post.content = "Тепер це оновлений контент!"
post.save() # Зберігаємо зміни
Після виклику save() запис у базі даних буде оновлено.
Видалення даних
Видалення також максимально просте:
post = Post.objects.get(title="Мій перший пост")
post.delete()
І все, запис зник з бази даних без сліду. Сподіваюся, ви були до цього готові.
Типові помилки при роботі через shell
Помилка
DoesNotExist. Виникає, якщо методget()не знайшов запис. Використовуйтеfilterабо перевірте наявність запису за допомогоюexists():if Post.objects.filter(title="Не існує").exists(): print("Запис знайдено") else: print("Запис не існує")Помилка
MultipleObjectsReturned. Якщоget()знаходить більше одного запису, він не знає, який повернути. Використовуйтеfilterз обмеженням:post = Post.objects.filter(title="Другий пост").first()Забули викликати
save(). Якщо ви створили об'єкт і змінили його, але забули викликатиsave(), зміни не збережуться.Введіть правильний шлях до моделі. Іноді забувають імпортувати правильну модель, особливо якщо ваш проєкт вже кілька днів розвивається, і в додатку більше однієї моделі.
Практичне завдання
Спробуйте виконати наступні кроки у вашому проєкті:
- Імпортуйте свою модель у Django shell.
- Створіть кілька записів у базі даних із різними значеннями.
- Прочитайте дані за допомогою
all()і переконайтеся, що вони відображаються коректно. - Знайдіть один із записів за допомогою
filterабоget, змініть його і збережіть. - Видаліть один із записів і переконайтеся, що він більше не існує.
Ці вправи допоможуть вам освоїти основні операції через Django shell і впевнено керувати вашою базою даних.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ