В этой части учебника мы продолжим разбирать Django модель, как с ней работать, в прошлой части мы уже рассмотрели как создавать модель, в этой уже научимся с ней полноценно работать, а точнее разберём пару методов.
Для тех кто не читал предыдущую часть, или просто не умеет создавать модель, то тогда посмотрите эту часть по ссылке.
Как работает Django Модель:
Для начала посмотрим как взять элементы, всего их можно взять несколькими способами, вот вам наглядные примеры:
1 2 3 4 5 6 7 8 9 | from .models import Post ... def get_posts(request, id): post = Post.objects.get(id=id) postsAll = Post.objects.all() posts = Post.objects.filter(category=category).order_by('-id') |
Как видите здесь мы импортировали модель Post
, потом мы создали для примера представление get_posts
, в которой передаём идентификатор, который потом используем для получения одного поста.
Теперь разберём как получать данные, сначала мы берём из базы данных только один пост, с помощью метода get()
, берём мы его по идентификатору, таким образом мы получим первый попавшейся пост с id
который мы передали, но вы можете и по другим данным искать посты, если вам надо.
Также вы скорее все заметили, что при получение мы не просто строем конструкцию Post.get()
, а делаем Post.objects.get()
, всё дело в том, что objects
, это специальный дочерний объект нашей модели для работы с элементами этой модели, если вы сделаете иначе, то просто будет ошибка, таким образом сделана работа с моделью в Django.
Следующие мы просто берём все посты, для этого используем Post.objects.all()
, вот принципе добавить нечего, этот метод просто берёт все элементы модели.
Последние, это самое интересное, тут мы берём данные по определённому фильтру, для этого используем метод Post.objects.filter()
, в нашем случае по категории, тут принцип такой же как и с get()
, только теперь берём не первый попавшейся элемент, а все совпадения которые нашли. Ещё вы можете заметить, что мы дополнительно используем метод order_by()
, он нужен для сортировки полученных элементов, в нашем случае по id
, а минус означает что сортирует по убыванию.
когда разобрались с получением элементов из базы данных, давайте покажу как сохранять их, вот пример кода сохранения:
1 2 3 4 5 | from .models import Post def post_save(request): new_post = Post(request.POST) new_post.save() |
Для сохранения данных мы по сути создаём объект класса Post, и передаём туда данные которые нам нужны, в нашем случае это POST данные от клиента (Про то как работать с формой расскажу в следующей части).
Используем метод save()
, нашего нового созданного объекта из модели Post
, и таким образом мы сохранили элемент в базе данных.
Но помнете, что метод save()
, можно переделать, если вам надо делать какие то действия с данными перед их сохранением, особенное это удобно когда вам надо сохранять данные не в одном месте на сайте.
Последние что осталось рассмотреть, так это как обновлять, или удалять данные из базы данных, вот пример кода:
1 2 3 4 5 6 7 | from .models import Post def post_update(request, id): Post.objects.get(id=id).update(title="New title") def post_delete(request.id): Post.objects.get(id=id).delete() |
В начале разберём как обновлять, тут всё максимально просто, как видите мы получаем по идентификатору пост и меняем уме заголовок с помощью метода update()
, чтобы поменять данные, нужно передать в качестве атрибутов свойства которые вы хотите поменять, но присваивая новое значение, можете задавать их несколько, для этого запишите их через запятую.
Также стоит упомянуть, что таким образом вы можете менять данные нескольких элементов, для этого просто нужно получить их через filter()
, если конкретные нужны, или all()
, если хотите поменять данные во всех элементах.
Удаление по такому же принципу работает, только вместо update()
, пишем delete()
, и точно так же вы можете удалять несколько элементов, просто для получения используете filter()
или all()
.
Вывод:
В этой части учебника по Django вы больше узнали как работать с моделью, как получать данные из БД, как создавать, обновлять и удалять, думаю вам было интересно и полезно.