【问题标题】:ManyToManyField serialization in DjangoDjango中的ManyToManyField序列化
【发布时间】:2019-06-26 23:04:14
【问题描述】:

我浏览了https://docs.djangoproject.com/en/2.1/topics/db/examples/many_to_many/ 的以下文档,并尝试使用它来学习使用 DRF 进行序列化。

所以,我的 models.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',)

我的 serializers.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')

我通过 shell 创建了一些对象:

>>> 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')])]}

所以,当我运行服务器时,一切都很好。这是我导航到 /articles 时的 JSON 表示:

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

但在我的 urls.py 中,我还有一个 /publications 链接,它显示了出版物列表:

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

因此,上面显示的第一个 JSON 表示 (/articles) 向我展示了文章,它为我提供了与文章相关的出版物列表。正如我之前所说,这看起来符合预期。 但是在向我显示出版物列表的第二个 JSON 表示 (/publications) 中,我看不到与每个出版物相关的文章列表。 我怎样才能做到这一点 ?我应该在 Publication 类中添加另一个 ManyToManyField 吗?或者 ForeignKey 字段是否足够? 当我导航到 /publications 时,我想要的是如下 JSON 表示:

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

我希望有人可以提供帮助。在此先感谢:)

【问题讨论】:

    标签: python django manytomanyfield


    【解决方案1】:

    您不需要添加任何模型字段。您只需将“article_set”添加到 PublicationSerializer 中的fields 列表中即可。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 2021-11-20
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多