请考虑以下示例。我有两个模型,一个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
添加回答
举报
0/150
提交
取消