Сериализация ManyToManyField в Django

Я просмотрел следующую документацию на https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_many/ и попытался использовать ее для изучения сериализации с помощью DRF.

Итак, мой модели.py:

class Publication(models.Model):
    title = models.CharField(max_length=30)

    class Meta:
        ordering = ('title',)

class Article(models.Model):
    headline = models.CharField(max_length=100)
    publications = models.ManyToManyField(Publication)

    class Meta:
        ordering = ('headline',)

Мой сериализаторы.py выглядит так:

class PublicationSerializer(serializers.ModelSerializer):


    class Meta:
        model = Publication
        fields = ('title',)

class ArticleSerializer(serializers.ModelSerializer):

    publications = PublicationSerializer(read_only=True, many=True)

    class Meta:
        model = Article
        fields = ('headline', 'publications')

Я создал некоторые объекты через оболочку:

>>> from publications.models import Article, Publication
>>> from publications.serializers import ArticleSerializer, PublicationSerializer
>>> p1 = Publication(title='The Python Journal')
>>> p1.save()
>>> p2 = Publication(title='Science News')
>>> p2.save()
>>> p3 = Publication(title='Science Weekly')
>>> p3.save()
>>> a1 = Article(headline='Django lets you build Web apps easily')
>>> a1.save()
>>> a1.publications.add(p1,p2,p3)
>>> serializer = ArticleSerializer(instance=a1)
>>> serializer.data
{'headline': 'Django lets you build Web apps easily', 'publications': [OrderedDict([('title', 'Science News')]), OrderedDict([('title', 'Science Weekly')]), OrderedDict([('title', 'The Python Journal')])]}

Итак, когда я запускаю сервер, все в порядке. Это представление JSON, когда я перехожу к /статьи:

[
    {
        "headline": "Django lets you build Web apps easily",
        "publications": [
            {
                "title": "Science News"
            },
            {
                "title": "Science Weekly"
            },
            {
                "title": "The Python Journal"
            }
        ]
    }
]

Но в моем urls.py у меня также есть ссылка /публикации, которая показывает мне список публикаций:

[
    {
        "title": "Science News"
    },
    {
        "title": "Science Weekly"
    },
    {
        "title": "The Python Journal"
    }
]

Итак, первое представление JSON (/статьи), показанное выше, которое показывает мне статьи, дает мне список публикаций, связанных со статьей. Как я уже говорил, это выглядит так, как и ожидалось. Но во втором представлении JSON (/публикации), которое показывает мне список публикаций, я не вижу списка статей, связанных с каждой публикацией. Как я могу это сделать ? Должен ли я добавить еще один Манитоманифилд в класс Публикация? Или достаточно поля Иностранный ключ? Мне нужно представление JSON, подобное следующему, когда я перехожу к /публикации:

 [
        {
            "title": "Science News"
            "article":[                      <-- This info should be added
                         "..." , etc.
                      ]
        },
        {
            "title": "Science Weekly"
            "article":[ 
                         "..." , etc.
                      ]
        },
        {
            "title": "The Python Journal"
            "article":[ 
                         "..." , etc.
                      ]
        }
    ]

Я надеюсь, что кто-то может помочь. Заранее спасибо :)

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам не нужно добавлять какие-либо поля модели. Вам просто нужно добавить «article_set» в список fields в PublicationSerializer.

Другие вопросы по теме