Получение данных один к одному в Django
В предыдущем уроке мы связали
посты и миниатюры через
OneToOneField. Напомним
структуру таблиц:
posts
- id
- title
thumbnails
- id
- path
- alt
- post_id
Давайте получим пост
с id равным 1:
from main.models import Post
post = Post.objects.get(id=1)
print(post.title)
У объекта поста появится
свойство thumbnail. Имя этого
свойства Django берет из имени
связанной модели в нижнем регистре.
Это свойство содержит объект миниатюры:
post = Post.objects.get(id=1)
print(post.thumbnail)
Давайте выведем поля миниатюры:
post = Post.objects.get(id=1)
print(post.thumbnail.path)
print(post.thumbnail.alt)
С обратной стороны тоже можно
пройти по связи. У миниатюры есть
свойство post - это имя
поля OneToOneField:
from main.models import Thumbnail
thumbnail = Thumbnail.objects.get(id=1)
print(thumbnail.post.title)
Можно выбрать сразу все посты и обойти их миниатюры в цикле:
posts = Post.objects.all()
for post in posts:
print(post.title, post.thumbnail.path)
Получите всех работников вместе с их контактами.
Получите всех работников с возрастом
25 лет вместе с их контактами.
Получите все контакты вместе с их работниками.