Получение и возврат категории и всех связанных с ней объектов
У меня есть объект Bookmark
и объект BookmarkCategory
. Я хотел бы иметь возможность получать JSON, который выглядит следующим образом:
GET -> localhost:8000/api/bookmarks
[
"python": {
"title": "Python",
"bookmarks": [
{
"title": "Python Documentation",
"url": "https://docs.python.org"
}
]
},
"javascript": {
"title": "Javascript",
"bookmarks": [
{
"title": "Python Documentation",
"url": "https://developer.mozilla.org/en-US/docs/Web/JavaScript"
}
]
}
]
Вот мои модели:
class BookmarkCategory(models.Model):
title = models.CharField(max_length=255)
class Bookmark(models.Model):
title = models.CharField(max_length=255)
url = models.CharField(max_length=255)
category = models.ManyToManyField(BookmarkCategory)
Вот как я запрошу все объекты BookmarkCategory:
from .models import BookmarkCategory
bookmarks = BookmarkCategory.objects.all()
JSON не обязательно должен выглядеть именно так. Мне просто нужно получить все объекты BookmarkCategory вместе со всеми связанными с ними объектами Bookmark, чтобы я мог перебирать их после того, как сделаю GET-запрос для их получения.
Вам придется использовать select_related на "bookmark_set", чтобы получить их вместе. Если вы используете DRF, вам нужно создать вложенную конфигурацию сериализатора для закладок. Вот пример без использования DRF:
categories = BookmarkCategory.objects.select_related("bookmark_set")
items = []
for category in categories:
items.append(
{
"title": category.title,
"bookmarks": category.bookmark_set.values_list("title", "url"),
}
)