請考慮以下示例。我有兩個模型,一個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
提交
取消