Получение и возврат категории и всех связанных с ней объектов

У меня есть объект 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"),
        }
    )
Вернуться на верх