Я просмотрел следующую документацию на 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.
]
}
]
Я надеюсь, что кто-то может помочь. Заранее спасибо :)






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