【发布时间】:2021-02-27 19:07:21
【问题描述】:
models.py(简化版)
class Author(models.Model):
name = models.CharField(max_length=255)
def __str__(self):
return self.name
def get_books(self):
return Book.objects.filter(author=self.pk)
class Book(models.Model):
name = models.CharField(max_length=255)
pages = models.IntegerField()
author = models.ForeignKey(Author, on_delete=models.CASCADE)
def __str__(self):
return f'{self.name} from {self.author}'
class Paragraph(models.Model):
name = models.CharField(max_length=255)
book = models.ForeignKey(Book, on_delete=models.CASCADE)
def __str__(self):
return f'{self.name} from {self.book}'
我想用这个结构返回一个json文件中的所有实例:
[
{
"name": 'Dumas',
"books": {
"name": "The count of Montecristo",
"paragraphs": {
"name": "paragraph_name_1",
},
{
"name": "paragraph_name_2",
},
{
"name": "The three Musketeers",
"paragraphs": {
"name": "paragraph_name",
},
]
我尝试了什么: serializers.py
class AuthorSerializer(serializers.ModelSerializer):
books = serializers.CharField(source='get_books', read_only=True)
class Meta:
model = Author
fields = ['name', 'books']
这添加了books 键,但值是Book 的字符串表示形式(当然),我如何使值成为Book 的序列化实例?我创建了一个BookSerializer。
注意事项:
我知道我可以通过使用depth = 2 为Paragraph 创建一个序列化程序来创建一个嵌套的json,但这将包括我不想要的字段(如Book 中的pages),并且json 结构将完全不同。
【问题讨论】:
标签: json django serialization