为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕娘9325324 2021-10-12 17:40:25
请考虑以下示例。我有两个模型,一个Author和一个Article。它们看起来像这样:# author.pyfrom django.db import modelsclass 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.pyfrom django.db import modelsfrom authors.models import Authorclass Article(models.Model):    author = models.ForeignKey(Author, on_delete=models.CASCADE)    text = models.TextField()    def __str__(self):        return self.text我的序列化程序看起来像这样:from rest_framework import serializersfrom .models import Articlefrom authors.serializers import AuthorSerializerclass ArticleSerializer(serializers.ModelSerializer):    author = AuthorSerializer()    class Meta:        model = Article        fields = '__all__'from rest_framework import serializersfrom .models import Authorclass AuthorSerializer(serializers.ModelSerializer):    class Meta:        model = Author        fields = '__all__'现在,如果我想从我的 API 中获取文章,那很简单。获取文章会附上作者,这一切都很好——但我如何得到相反的结果?例如,如果我想让作者拥有他们撰写的最新 5 篇文章?所以预期的输出将是这样的:{    "first_name": "Sethen",    "last_name": "Maleno",    "articles": [      {          "text": "some article"      },      {          "text": "another article"      }    ]}
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

class ArticleWithoutAuthorSerializer(ArticleSerializer):

    # Prevent author field serialization and endless nesting

    author = None


class 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


查看完整回答
反对 回复 2021-10-12
  • 1 回答
  • 0 关注
  • 140 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号