猿问

Django rest 框架在序列化程序中检索列表

请考虑以下示例。我有两个模型,一个Author和一个Article。它们看起来像这样:


# author.py


from django.db import models



class Author(models.Model):

    first_name = models.CharField(max_length=50)

    last_name = models.CharField(max_length=50)


    def __str__(self):

        return self.first_name

# article.py


from django.db import models

from authors.models import Author



class Article(models.Model):

    author = models.ForeignKey(Author, on_delete=models.CASCADE)

    text = models.TextField()


    def __str__(self):

        return self.text

我的序列化程序看起来像这样:


from rest_framework import serializers

from .models import Article

from authors.serializers import AuthorSerializer



class ArticleSerializer(serializers.ModelSerializer):

    author = AuthorSerializer()


    class Meta:

        model = Article

        fields = '__all__'

from rest_framework import serializers

from .models import Author


class AuthorSerializer(serializers.ModelSerializer):

    class Meta:

        model = Author

        fields = '__all__'

现在,如果我想从我的 API 中获取文章,那很简单。获取文章会附上作者,这一切都很好——但我如何得到相反的结果?例如,如果我想让作者拥有他们撰写的最新 5 篇文章?所以预期的输出将是这样的:


{

    "first_name": "Sethen",

    "last_name": "Maleno",

    "articles": [

      {

          "text": "some article"

      },

      {

          "text": "another article"

      }

    ]

}


慕娘9325324
浏览 141回答 1
1回答

慕容3067478

class ArticleWithoutAuthorSerializer(ArticleSerializer):    # Prevent author field serialization and endless nesting    author = Noneclass AuthorSerializer(ModelSerializer):    articles = SerializerMethodField()    def get_articles(self, author):        # Five recently posted articles        articles = author.article_set.order_by('-published')[:5]        return ArticleWithoutAuthorSerializer(articles, many=True).data    class Meta:        model = Author
随时随地看视频慕课网APP

相关分类

Python
我要回答